gpt4 book ai didi

python - 嵌套函数的更多 pythonic 方式

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:22 25 4
gpt4 key购买 nike

这是我的代码:

def reallyquit():
from easygui import boolbox
if __debug__: print ("realy quit?")
answer = boolbox("Are you sure you want to Quit?")
if answer == 1:
sys.exit()
return

columns = ['adr1','adr2','spam','spam', 'spam']

Street = choicebox("Street Address?", title, columns)
while Street == None:
reallyquit()
Street = choicebox("Street Address?", title, columns)

如果用户无意中关闭了一个框,是否有更 pythonic 的方式递归地提出问题?主要寻找最后 4 行的提示,但请随意批评其余部分。

最佳答案

import sys
from easygui import boolbox, choicebox

def reallyquit():
"Ask if the user wants to quit. If so, exit."
if __debug__:
print("really quit?")
answer = boolbox("Are you sure you want to Quit?")
if answer == 1:
sys.exit()

columns = ['adr1', 'adr2', 'spam', 'spam']
street = None

# ask for address until given or user decides to quit
while street is None:
street = choicebox("Street Address?", title, columns)
if street is None:
reallyquit()

在主要逻辑中:通常你不会测试一个值是否等于None,因为它是一个单例(系统中只有一个,并且所有出现的None 是相同的逻辑 None)。因此 is None 是一个更好的测试。我还使用了更多 Pythonic 代码格式(列表中逗号后的空格、小写变量名)和不重复用户交互调用的测试顺序。

Eric 建议的替代形式会是这样的:

while True:
street = choicebox("Street Address?", title, columns)
if street is not None:
break
reallyquit()

这具有不重复 street is None 测试的优点,但会更长一些。您对哪个选项看起来更清晰、更合乎逻辑的偏好可能会有所不同。

对于准备工作:从功能中取出导入,并在之前缺少的地方导入choicebox。函数给出定义注释字符串。强制执行每行一个语句标准。并且删除了不必要的 return

这仍然是一个相当粗糙的程序,但它现在“更像 Pythonic”了。

不是压倒性的,但 Pythonic 代码外观的标准是 PEP 8 .有pep8等工具您可以安装以检查合规性。在 PEP 20 中概述了 Pythonic 代码的更深层次或“语义”部分。 ,也被称为“Python 之禅”。遗憾的是,没有工具可以判断是否符合这些更深层次的原则。需要经验。

关于python - 嵌套函数的更多 pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39340832/

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