Python中的"Boilerplate"代码?

Bha*_*axy 30 python boilerplate

谷歌有一个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()
Run Code Online (Sandbox Code Playgroud)

现在,我听说样板代码被描述为"看似重复的代码,一次又一次地出现以获得一些似乎应该更简单的结果"(例子).

无论如何,在Python中,上面例子中被认为是"样板"代码的部分是:

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

现在,我的问题如下:

1)Python中的样板代码(如提供的示例)是否与我提供的定义具有相同的定义?如果是这样,为什么?

2)这个代码甚至是必要的吗?在我看来,代码运行是否有主要方法.是什么让这个代码变得更好?它更好吗?

3)为什么我们使用该代码以及它提供的服务?

4)这是否会在整个Python中发生?还有"样板代码"的其他例子吗?

哦,只是一个偏离主题的问题:你需要import sys在Python中使用命令行参数吗?如果它不在那里,它如何处理这些论点?

Win*_*ert 22

  1. 从某种意义上说,它是重复的,因为它可能会从命令行执行的每个脚本重复出现.
  2. 如果将主代码放在这样的函数中,则可以导入模块而不执行它.这有时很有用.它还可以使事情更有条理.
  3. 就我所知,与#2相同
  4. Python通常非常擅长避免样板.它足够灵活,在大多数情况下,您可以编写代码来生成样板,而不是编写样板代码.

非主题问题:

如果您不编写代码来检查参数,则会忽略它们.


and*_*kus 7

if __name__ == "__main__":在这种情况下,块被称为样板的原因是它复制了许多其他语言中自动的功能.在Java或C++中,在运行代码时,它会查找一个main()方法并运行它,甚至会抱怨它是否存在.Python运行文件中的任何代码,因此您需要告诉它运行该main()方法; 一个简单的替代方法是使该main()方法成为默认功能.

因此,这if __name__ == "__main__":是一种可能更短的常见模式.没有理由你不能做一些不同的事情,比如:

if __name__ == "__main__":
  print "Hello, Stack Overflow!"

  for i in range(3):
    print i

  exit(0)
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作; 虽然我的例子有点傻,你可以看到你可以放任何你喜欢的东西.Python设计者选择这种行为而不是自动运行该main()方法(可能不存在),可能是因为Python是一种"脚本"语言; 因此,您可以将一些命令直接写入文件,运行它,并执行命令.我个人更喜欢它的Python方式,因为它使初学者更容易在Python中启动,并且拥有Hello World是一行的语言总是很好.