【发布时间】:2025-12-24 08:40:06
【问题描述】:
Google 有一个 Python 教程,他们将样板代码描述为“不幸”并提供了以下示例:
#!/usr/bin/python
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print 'Hello there', sys.argv[1]
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
现在,我听说样板代码被描述为“为了获得看起来应该更简单的结果而一次又一次出现的看似重复的代码”(example)。
无论如何,在 Python 中,上面示例中被视为“样板”代码的部分是:
if __name__ == '__main__':
main()
现在,我的问题如下:
1) Python 中的样板代码(如提供的示例)是否采用与我提供的定义相同的定义?如果有,为什么?
2) 这段代码是否必要?在我看来,无论是否有 main 方法,代码都会运行。是什么让使用此代码更好?是不是更好?
3) 我们为什么使用该代码以及它提供什么服务?
4) 这会在整个 Python 中发生吗?还有其他“样板代码”的例子吗?
哦,还有一个题外话:你需要import sys 才能在 Python 中使用命令行参数吗?如果它不存在,它如何处理这样的论点?
【问题讨论】:
-
sys无论您是否导入它都存在。如果你不这样做,你就不能在你的代码中使用它。 -
只是对此特定样板代码的评论,您应该始终使用
#!/usr/bin/env python而不是!#/usr/bin/python,因为这会获取用户/环境特定的python 版本。这是可取的,因为用户可以将 python 称为其他东西或安装在 /bin 以外的位置,尽管通常这些东西都不正确。然而,作为一个处理过由此产生的错误的人,我可以告诉你,他们非常令人沮丧。这有点像硬编码路径或使用相对路径之间的区别。 -
例如 Python 2 和 3 的样板,看看python-boilerplate.com
-
一个重要的用途是所有从
main()运行的函数和类都被提升。这自然会在 nodejs 等语言中发生,如果用户希望main()位于调用下面其他函数的脚本顶部,这将非常有用。
标签: python boilerplate