我知道,我可以简单地在if __name__ == '__main__
下编写缩进的代码,或者将其放在函数中。但是,这会增加不必要的缩进级别。我也意识到这将是糟糕的风格,我应该写一个合适的模块。我只是想知道。当然,与setuptools
一起使用的入口点甚至更好,人们不应该懒惰并使用virtualenv进行测试。我问这个问题的纯粹学术知识是否有命令提前完成导入文件'。
可以提前返回函数以防止其余的函数代码执行。这样可以保存缩进级别。例如:
def my_func(arg):
print arg
if arg == 'barrier':
return
print 'arg is not barrier'
# ...
# alot more nested stuff that
# will not be executed if arg='barrier'
与以下内容相比,保存缩进级别:
def my_func(arg):
print arg
if arg == 'barrier':
return
else:
print 'arg is not barrier'
# ...
# alot more nested stuff that
# is one indentation level deeper :-(
导入模块时是否可以执行类似操作,以便不导入其余代码? 例如,在模块文件中:
# !/usr/bin/python
# I'm a module and a script. My name is 'my_module.py'.
# I define a few functions for general use, and can be run standalone.
def my_func1(arg):
# ... some code stuff ...
pass
def my_func2(gra):
# ... some other useful stuff ...
pass
if __name__ != '__main__':
importreturn # Statement I'm looking for that stops importing
# `exit(0)` here would exit the interpreter.
print 'I am only printed when running standalone, not when I'm imported!'
# ... stuff only run when this file is executed by itself ...
所以我没有看到&#34;我只在独立运行时打印,而不是在我导入时打印!&#34; ,当我这样做时:< / p>
import my_module.py
my_func2('foobar')
答案 0 :(得分:2)
您不想避免缩进,缩进会简明扼要地说明您打算执行的代码:
if __name__ == '__main__':
print "I am only printed when running standalone, not when I'm imported!"
else:
print "I am only printed when importing"
如果你想要将它包装在一个函数中?
def main():
if __name__ == '__main__':
print "I am only printed when running standalone, not when I'm imported!"
return
print "I am only printed when importing"
main()
答案 1 :(得分:2)
不,在Python中没有声明。
最接近你想要的是引发异常并在try / except块中进行导入。提升声明后的代码不会被执行。
要真正实现这样的语句,您需要一个自定义导入处理程序来执行一些预处理和/或自定义编译器。如果您想了解Python内部结构,而不是应该在实际应用程序中使用的内容,这可能是一个有趣的挑战。