def main():
import sys, re
args = sys.argv[1:]
iptfile = args and args[0] or "Python/graminit.c"
if len(args) > 1: optfile = args[1]
else: optfile = "Lib/keyword.py"
iptfile = args and args[0] or "Python/graminit.c"
是什么意思?
我能理解iptfile = args or "Python/graminit.c"
。
此外,如果我遵循此惯例,模块将在main()
内导入而不是位于顶部?
答案 0 :(得分:1)
这个文件几乎是一种quine来生成kwlist
。它需要两个可选输入,语法和模板,并更新kwlist
列表。默认情况下,它自己编写!
解决您的具体意见
iptfile = args and args[0] or "Python/graminit.c"
这是一个穷人的ternary表达。如果args
是真实的:iptfile = args[0]
,否则iptfile = "Python/graminit.c"
- 或许更具可读性的形式
iptfile = args[0] if args else "Python/graminit.c"
虽然如果你看一下引入这段代码的the commit,它甚至会在语言中使用该语法(1997-03-20)!
导入作为一种性能黑客位于函数内部。除了在构建时,生成关键字列表文件的代码几乎从不执行,因此在关键路径中避免了导入(可能代价高昂)。通常这种样式不是必需的,在文件顶部导入就好了(通常更容易维护/协作)。