gpt4 book ai didi

函数的 quiet/verbose 标志的 Pythonic 实现

转载 作者:太空狗 更新时间:2023-10-30 01:57:17 25 4
gpt4 key购买 nike

为了编写 pythonic 代码,我想知道是否有一个风格指南涵盖了函数的安静或冗长选项的使用。

例如,在我的 Python 包中,我有一系列相互调用的函数,因此用户希望能够不时请求打印输出。

例如:

def simple_addition(a, b, silent=True):
res = a + b
if not silent: print('The answer is %i' % res)
return res

这里有标准的参数名称吗?例如应该使用“quiet”/“silent”来抑制所有打印输出。或者如果为真,是否应该使用“冗长”来要求这一点?

最佳答案

如果您不想依赖日志记录库,我认为您的解决方案已经pythonic 足够了。写起来可能有点pythonic:

def simple_addition(a, b, silent=True):
res = a + b
if not silent:
print('The answer is %i' % res)
return res

PEP 8, Other Recommendations 中所述, 单行 if 语句是可以的,但不鼓励。

还有其他的可能性。

使用

使用 or 运算符来编码条件可以说不是 pythonic但我个人认为它读起来不错:“silent or...”、“quiet or...”。见下文:

def simple_addition(a, b, silent=True):
res = a + b
silent or print('The answer is %i' % res)
return res

or 运算符会短路,因此 print 及其参数仅在 silent 为 False 时才被评估,就像使用 >if 语句。

缺点是如果 silent 绑定(bind)到 bool 类型,mypy 类型检查将失败:

$ cat > add.py
def simple_addition(a, b, silent: bool = True):
res = a + b
silent or print('The answer is %i' % res)
return res
^D
$ mypy add.py
add.py:3: error: "print" does not return a value

noop 三元

我们也可以这样做:

def noop(*args, **kwargs):
pass

def simple_addition(a, b, silent=True):
_print = noop if silent else print
res = a + b
_print('The answer is %i' % res)
return res

...但它感觉很不自然。

关于函数的 quiet/verbose 标志的 Pythonic 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41476218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com