Importing another script in python
假设我有一个名为script.py的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 | def num(): ... return num1, num2 def quiz() ... ... num1, num2 = num() name = input('name: ') class_num = input('class: ') if __name__ = '__main__': quiz() |
在另一个脚本中,我希望使用此脚本和script.py定义的变量:
1 2 3 4 5 6 7 | import script script.quiz() def path(class_num): ... # do stuff |
这个一直在返回
'NameError: name 'class_num' is not defined'
如何在第二个脚本中使用script.py中定义的所有变量?
您在脚本中定义了一个不返回任何内容的函数,所有由用户输入定义的变量都需要返回。
1 2 3 4 5 | def quiz(): stuff name = input('...') class_num = input('...') return [stuff, name, class_num] |
其他脚本需要更改为
1 | results = script.quiz() |
然后分析
你可以用这样的东西在你的脚本中.py返回类num变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def num(): ... return num1, num2 def quiz() ... ... num1, num2 = num() name = input('name: ') class_num = input('class: ') return class_num if __name__ = '__main__': quiz() |
像这样使用
1 2 3 4 5 6 7 | import script class_num = script.quiz() def path(class_var = class_num): ... # do stuff |
在代码中,您试图通过导入不正确的script.py来使用局部变量。
希望能有所帮助!
您试图使局部变量作为全局变量。
In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global.
误差
'NameError: name 'class_num' is not defined'
确切地告诉您,此变量不存在于其调用的作用域中。
解决问题只需改变
1 2 3 4 5 6 7 | def quiz() ... ... num1, num2 = num() name = input('name: ') class_num = input('class: ') return class_num |
在另一个脚本中,捕捉返回变量
1 2 3 | class_num = script.quiz() def path(class_num): |
我修改了脚本以显示这两种情况:a)其他人提到的返回值,b)缺少路径的执行,返回值作为参数值。这里有script.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | def num(): num1 = 1 num2 = 2 return num1, num2 def quiz(): num1, num2 = num() name ="Andreas" class_num = 9 return class_num if __name__ == '__main__': quiz() |
这里有些东西。
1 2 3 4 5 6 7 8 | import script def path(class_num): pass # do stuff class_n = script.quiz() path(class_n) |
我希望这能说明它是如何工作的。您可能稍后在函数路径之外的某个地方使用变量class_num。这会给你一个名字错误。
python不知道变量
1 2 3 4 5 6 7 8 9 10 | import script script.quiz() ... class_num = input('class: ') # quiz function exits, making class_num go out of scope # since class_num doesn't exist, this NameError def path(class_num): ... |
如果希望类名在函数外部可用,请返回它
1 2 3 4 5 6 7 | def quiz() ... ... num1, num2 = num() name = input('name: ') class_num = input('class: ') return class_num # <======= |
在另一个剧本里
1 2 3 4 | class_num = script.quiz() # <======= def path(class_num): ... |
如果希望
- 多重回报,就像你对
num 方法所做的那样 - 创建一个保存所有数据的对象,这些数据作为一个返回。对象将是完美的,其他选项将是命名副本或字典。
- 使用全局变量(请不要这样做)