首页 > 解决方案 > 在模块中设计函数的 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 方法是什么?

标签: python

解决方案


他们俩都没事。但是,在第二种情况下,如果您的程序代码中嵌入了太多控制流,则可能会混淆您对读者的意图。使用第一种方法来避免过多的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

推荐阅读