我有一个脚本,其中包含我想在另一个中使用的函数,即
def main():
def ex(a,b):
return a+b
if __name__ == "__main__":
main()
每当我将此脚本导入另一个脚本时,我都会收到错误" module' script'没有属性' ex'" :
import script
script.ex(4,5)
答案 0 :(得分:1)
是的,这是正确的,函数ex()
是一个本地函数,只在函数main()
的范围内知道。如果您导入该模块,它将包含函数main()
,如果您在中调用,则在执行此函数时,将存在函数ex()
。函数main()
终止后,函数ex()
将不复存在。
您可能认为函数具有(模块)全局范围,而Python中并非如此。
您可以通过多种方式更改代码以避免错误。最明显的是在模块级别定义ex()
(即没有内部 main()
函数):
def main():
# do whatever
pass
def ex(a,b):
return a+b
另一种选择是返回本地函数:
def main():
def ex(a,b):
return a+b
return ex
然后导入程序可以这样做:
import script
ex = script.main()
print(ex(4, 5))
还有很多其他方法可以达到你想要的效果。由于您没有告诉我们ex()
这个main()
的原因,我们只能猜测哪种方式最适合您。
答案 1 :(得分:0)
您必须将代码转换为以下内容:
def main(a,b):
def ex(a,b):
return a+b
return ex(a,b)
if __name__ == "__main__":
main()
详细说明会发生这样的事情:
import script
script.main(1,2)
问题是ex()是在main函数的范围内定义的。您无法直接从外部访问它。
答案 2 :(得分:-1)
要在调用函数时调用函数ex()
,必须将其封装在script.py中的类或任何文件script
中。所以在您的情况下,脚本.py应如下所示:
class Script:
def ex(a,b):
return a+b
并在您要使用脚本的文件中:
script = new Script()
script.ex(4, 5)
希望这有帮助。