我正在使用python 2.7,以下是我的脚本的简化版本:
executor.py
import sys
def someCal(num):
num = int(num)
print num*num
someCal(sys.argv[1])
所以python executor.py 13
将打印出169,它按预期工作。
我有另一个脚本,我想在someCal()
中使用executor.py
函数,所以我导入它
main.py
import executor
to_count = 999
executor.someCal(to_count)
执行python main.py
时,我收到了以下错误消息:
File "main.py", line 3, in <module>
import executor
File "/Users/mac/executor.py", line 13, in <module>
someCal(sys.argv[1])
我不知道为什么它继续提到executor.py中的第13行,因为我没有使用那部分。
提前致谢!
答案 0 :(得分:2)
当您在 main.py 中import executor
时,它实际上正在python executor.py
,我建议您将 executor.py 更改为:
if __name__ == '__main__':
someCal(sys.argv[1])
并且,您可能希望在使用if len(sys.argv)>1
之前直接添加防守代码sys.argv[1]
答案 1 :(得分:2)
from executor import *
这是一种更好的方法,可以正常使用。如果名称 ==&#39; 主要&#39;:< / em>用这种方法。您也可以使用他们的名字来调用您的函数。喜欢:
from executor import *
print (someCal(10))
编辑例如:
executor.py
def someCal(num):
num = int(num)
return num*num
another.py
from executor import *
print (someCal(10))
输出:
>>>
100
>>>
如果使用函数,则应该返回函数中的值,而不是打印。如果你返回一个值,你可以稍后打印。但是如果你不使用 return 并保持它像 print num * num ,那么以后你不能用它来打印功能。你可以尝试看看。因此,返回一个值在函数中很重要。
对于您的第二个问题,请选中以下问题:What does if __name__ == "__main__": do?
Python是关于清除代码的最佳语言,因此您应该保持清晰, sys 对您来说不是必需的。你不需要如果名称 ==&#39; 主要&#39;:这句话,请记住每个.py文件都是一个模块,所以如果你可以导入任何没有该语句的模块,比如 import random ;那么你也可以导入你自己的模块。只需关心它们必须保持在同一个目录中,这样Python就可以找到你自己的模块/文件。保持简单: - )
模块的另一种导入方法是:
import executor as ChuckNorris
print (ChuckNorris.someCal(10))
输出当然是相同的,您可以编写任何您想要的内容而不是 ChuckNorris ,但请确保该名称与程序中的其他函数名称不重叠。例如,你有一个名为Number.py的.py文件,你将把这个文件导入到另一个文件中,但你不能确定在另一个文件中是否有任何名为 Number 的函数,所以你可以调用它导入数字为whatyouwanttocallit ,您将避免出现这些问题。