我有很多简单的脚本来计算一些东西.它们只包含一个模块.
我应该为它们编写主要方法并使用if __name__构造调用它们,还是只将它们转储到那里?
两种方法有什么优点?
什么是全球声明?它是如何使用的?我读过Python的官方定义 ;
但是,它对我来说没有多大意义.
许多编程语言都需要一个特殊的用户编写函数来标记执行的开始.例如,在C中,此函数必须始终具有名称main().但是,在JavaScript中,不需要这样的功能.
在JavaScript中缺少这种专用顶级函数的逻辑原因是什么?我知道这是某种理论问题,但我无法在网上找到答案.
我是Python的新手(也是编程人员),虽然有很好的文档,但我无法理解-m指令的确切含义(正是在创建虚拟环境时:python3 -m venv my_env.
据我所知,从文档中可以看出,它代表"将库模块作为脚本运行":实际上这是我无法弄清楚的概念,没有运行命令的区别是什么-m.
而且,这是Python 3的一个特点吗?
谷歌有一个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)这个代码甚至是必要的吗?在我看来,代码运行是否有主要方法.是什么让这个代码变得更好?它更好吗? …
在Bash中,我希望能够同时获取脚本并执行该文件.什么是Bash相当于Python的if __name__ == '__main__'?
我没有在Stackoverflow上找到关于这个主题的现成问题/解决方案(我怀疑我的问题是这样的方式与现有的问题/答案不符,但这是我能想到的最明显的方式.问题是因为我的Python经验).
ps关于可能的重复问题(如果我有更多时间,我会写一个更短的回复):
该链接到问题问:"如何检测如果脚本正在采购",但这个问题是问"你怎么创建一个bash脚本,既可以是采购和运行的脚本?".这个问题的答案可能会使用上一个问题的某些方面,但有其他要求/问题如下:
TL; DR
这是一个示例存储库,如第一个图(下面)中所述设置:https://github.com/Poddster/package_problems
如果你可以在项目组织方面让它看起来像第二个图,并且仍然可以运行以下命令,那么你已经回答了这个问题:
$ git clone https://github.com/Poddster/package_problems.git
$ cd package_problems
<do your magic here>
$ nosetests
$ ./my_tool/my_tool.py
$ ./my_tool/t.py
$ ./my_tool/d.py
(or for the above commands, $ cd ./my_tool/ && ./my_tool.py is also acceptable)
Run Code Online (Sandbox Code Playgroud)
或者:给我一个不同的项目结构,允许我将相关文件('包')组合在一起,单独运行所有文件,将文件导入同一包中的其他文件,并将包/文件导入其他包的文件.
我有一堆python文件.当从命令行调用时,它们中的大多数都是有用的,即它们都使用argparse并if __name__ == "__main__"执行有用的操作.
目前我有这个目录结构,一切正常:
.
??? config.txt
??? docs/
? ??? ...
??? my_tool.py
??? a.py
??? b.py
??? c.py
??? d.py
??? e.py
??? README.md
??? tests
? ??? __init__.py
? ??? a.py
? ??? …Run Code Online (Sandbox Code Playgroud) 我没有做太多的python - 来自C/Java背景 - 所以请原谅我提出这么简单的问题.我在Eclipse中使用Pydev来编写这个简单的程序,我想要它做的就是执行我的main函数:
class Example():
if __name__ == '__main__':
Example().main() <----- What goes here?
def main(self):
print "Hello World!
Run Code Online (Sandbox Code Playgroud)
这就是我现在拥有的.我也试过了
self.main()
Run Code Online (Sandbox Code Playgroud)
和
main()
Run Code Online (Sandbox Code Playgroud)
和
main(self)
Run Code Online (Sandbox Code Playgroud)
没有一个工作.我错过了什么?
我是Python的新手,所以如果问题太基础,请不要激怒我:)
我已经读过Python从上到下执行.
如果是这种情况,为什么程序会这样:
def func2():
pass
def func1():
func2()
def func():
func1()
if __name__ == '__main__':
func()
Run Code Online (Sandbox Code Playgroud)
所以从我所看到的,主要功能最后,其他功能堆叠在它上面.
这样说我错了吗?如果不是,为什么主函数或函数定义不是从上到下编写的?
编辑:我在问为什么我不能这样做:
if __name__ == '__main__':
func()
def func1():
func2()
Run Code Online (Sandbox Code Playgroud)
这不是自然秩序吗?你继续在底部添加东西,因为它是从上到下执行的.
python ×8
bash ×1
boilerplate ×1
global ×1
import ×1
javascript ×1
packages ×1
pycharm ×1
pydev ×1
python-2.7 ×1
python-3.x ×1