python - 在模块中设计函数的 Pythonic 方式
问题描述
在设计模块时,最好有多个执行相似操作的函数或一个基于参数表现不同的函数。
def to_hex(val):
pad = bits // 4
return '{:X}'.format(val).zfill(pad)
def to_bin(val):
pad = bits
return '{:b}'.format(val).zfill(pad)
...
或者:
def to_string(val, form='b'):
if form == 'X':
pad = bits // 4
elif form == 'o':
...
return '{:{form}}'.format(val, form=form).zfill(pad)
这可能是基于意见的,但 pythonic 方法是什么?
解决方案
他们俩都没事。但是,在第二种情况下,如果您的程序代码中嵌入了太多控制流,则可能会混淆您对读者的意图。使用第一种方法来避免过多的if else
逻辑。但是,如果您的方法非常相似,则应该将它们封装在一个类中。这种方法将帮助您避免不必要的重复。例如:
class HexBin:
def __init__(self, val, bits):
self.val = val
self.bits = bits
def to_hex(self):
pad = self.bits // 4
return '{:X}'.format(self.val).zfill(pad)
def to_bin(self):
pad = self.bits
return '{:b}'.format(self.val).zfill(pad)
你可以像这样使用它:
>> obj = HexBin(10, 10)
>> print(obj.to_hex())
>> print(obj.to_bin())
0A
0000001010
推荐阅读
- json - Logstash json 字段转换
- ios - 为什么 ARFaceAnchor 和 ARImageAnchor 是唯一符合 ARTrackable 协议的锚类型?
- azure - 在带有代理的 Azure 函数中,获取原始 URL
- c - 是否可以在c中动态初始化静态变量?
- sql-server - Kafka Connect Microsoft SQL Server 连接器未给出任何结果
- java - 用于在多个嵌套循环中验证数据的 Java 8 替代方案
- ios - 领域多对一关系示例
- jvm - 如何在 snaplogic 中将 Python 脚本转换为 JVM
- record - 更改派生记录中的默认初始值
- java - 在java中将一个数组复制到另一个数组中。数组存储异常