无法导入本地python模块
我有一个脚本,其中包含一个我想在另一个脚本中使用的函数,即无法导入本地python模块,python,python-3.x,Python,Python 3.x,我有一个脚本,其中包含一个我想在另一个脚本中使用的函数,即 def main(): def ex(a,b): return a+b if __name__ == "__main__": main() 每当我将此脚本导入另一个脚本时,都会出现错误“模块“script”没有属性“ex”: 是的,这是正确的,函数ex()是一个局部函数,它只在函数main()的范围内已知。如果您导入该模块,它将包含函数main(),如果您在其中调用该函数,则在执行该函数时,将存在函数
def main():
def ex(a,b):
return a+b
if __name__ == "__main__":
main()
每当我将此脚本导入另一个脚本时,都会出现错误“模块“script”没有属性“ex”:
是的,这是正确的,函数
ex()
是一个局部函数,它只在函数main()
的范围内已知。如果您导入该模块,它将包含函数main()
,如果您在其中调用该函数,则在执行该函数时,将存在函数ex()
。一旦函数main()
终止,函数ex()
将停止存在
您可能觉得函数有一个(模块)全局作用域,而Python中没有
您可以通过多种方式更改代码以避免错误。最明显的是在模块级别定义ex()
(即main()
函数中的no):
另一种选择是返回本地函数:
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()
中,我们只能猜测哪种方式最适合你。你必须将你的代码转换成这样的东西:
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函数的作用域下定义的。您将无法直接从外部访问它 要在试图调用函数时调用函数
ex()
,必须将其封装在script.py中的类中,或任何存在于中的文件script
。因此,在您的情况下,script.py应该如下所示:
def main(a,b):
def ex(a,b):
return a+b
return ex(a,b)
if __name__ == "__main__":
main()
类脚本:
def ex(a、b):
返回a+b
在要使用脚本的文件中:
script=newscript()
script.ex(4,5)
希望这有帮助。
ex
未公开,不能像那样导入<但是,如果这有助于说明导出的内容,则代码>main是。换句话说,您必须将def ex()
置于与def main()
相同的范围/缩进级别。是的,这就是我的印象。我猜在module.main()被导入后调用它不是一个好的做法?好吧,这要看情况而定。我从未见过它被命名为main()
,但有些模块在导入后需要进行初始化。最显著的图形库出现在脑海中,例如。g<代码>导入SomeWindowsLib,然后winServer=SomeWindowsLib.init()
或…getWinServer()
或类似。