我从有关导入的类似问题中了解到,不应将“操作代码”和import
(它们应该位于顶部)混合在一起。
在“操作代码”中间定义函数的共识是什么?
我有一个例子,一个函数只在一个地方使用(它必须是一个函数)并且它的定义接近那段代码是有意义的(所有都将被组合在一起)。但是,它在视觉上破坏了代码的流程。
PEP有什么建议吗?(我没有找到任何相关的东西,而不是import
)
编辑:答案的明显趋势是这不是一件好事,但与import
上面提到的情况不同,没有明确的指令(例如 PEP)
我从有关导入的类似问题中了解到,不应将“操作代码”和import
(它们应该位于顶部)混合在一起。
在“操作代码”中间定义函数的共识是什么?
我有一个例子,一个函数只在一个地方使用(它必须是一个函数)并且它的定义接近那段代码是有意义的(所有都将被组合在一起)。但是,它在视觉上破坏了代码的流程。
PEP有什么建议吗?(我没有找到任何相关的东西,而不是import
)
编辑:答案的明显趋势是这不是一件好事,但与import
上面提到的情况不同,没有明确的指令(例如 PEP)
python 脚本或模块中的所有代码(基本上是相同的东西 - 不同之处在于它的使用方式)以一种或另一种方式是“操作代码”。构建脚本代码的简洁方法是将所有内容都包含在函数中——你称之为“操作代码”的东西在“main()”函数中——如果模块被用作,只需调用该“main”函数脚本,即:
# mymoduleorscript.py
import something
from somewhere import somethingelse
def somefunc(arg1, arg2):
# ...
def otherfunc(arga, argb):
# ...
def main(*args):
# "operational" code here
return status_code # 0 if ok, anything else if error
# only call main if used as a script
if __name__ == "__main__":
import sys
sys.exit(main(*sys.argv[1:]))
请注意,这不是“我认为”的答案,而是官方祝福的 OneTrueWay 做事方式。
除非真的有必要,否则我更喜欢将所有内容放在脚本的顶部,因为这样可以更容易地找到它们——更易读——也更整洁。
我认为如果您的代码将被其他人阅读,那么这开始变得非常重要,您不希望他们在想要查看功能或您的代码如何运行时感到困惑。
此外,将您的程序分解成更小的部分,尤其是对于长而长的代码是一个好主意。当您必须处理任何一部分时,您可以快速完成。所以对我来说,顶部是声明,底部是操作代码。:)
我不知道为什么,但我想在这里附加这个:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
...
在我看来,将功能排除在操作代码之外是好的,原因有两个:
我认为问题在于您的操作代码太长,这导致如果您在操作代码之前定义该函数,那么它离调用它的位置太远。
拥有一段很长的代码通常不是一个好主意,不仅在 Python 中。我的建议是找到一些方法将你的长段操作代码拆分成模块(函数或类)。
好吧,我不确定这是对还是错,因为我是这里的另一个新手。但是我在我的代码中实现了一些类似的东西,它将在操作代码之间导入。
代码:
import os,importlib,
l = os.listdir(os.getcwd())
x = [m.split('.')[0] for m in l if m.endswith('.py')] # list all the py files in the direcory.
modules = []
for mod in x:
modules.append(importlib.import_module(mod)) # I am importing them using a for loop
我真的不知道这是你要找的。但是,如果它可以以任何方式帮助您,我会很高兴......我会将最佳编程实践的评论留给这里的向导:)
我可以看到,有时这可能与“平面优于嵌套”有关。例如,
def dist(x, y):
return abs(x - y)
for a, v in ls1:
ls2.append(dist(a, b))
对比
for a, v in ls1:
def dist(x, y):
return abs(x - y)
ls2.append(dist(a, b))
我个人有时会混合功能和操作代码。我没有看到任何针对它的特定 PEP,但仍应考虑代码组织的一般考虑。