关于模块:在python中导入另一个脚本

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()

然后分析results,它们将包含测验响应。


你可以用这样的东西在你的脚本中.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来使用局部变量。

希望能有所帮助!


您试图使局部变量作为全局变量。class_num在函数quiz内有一个作用域,但不在函数quiz外。

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不知道变量class_num是什么,因为它被困在quiz方法中。

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):
    ...

如果希望quiz中的其他变量可用,您有几个选项:

  • 多重回报,就像你对num方法所做的那样
  • 创建一个保存所有数据的对象,这些数据作为一个返回。对象将是完美的,其他选项将是命名副本或字典。
  • 使用全局变量(请不要这样做)