在python中导入另一个脚本

时间:2016-02-11 18:51:17

标签: python module

假设我有一个名为script.py的脚本:

def num():
    ...
    return num1, num2

def quiz()
   ...
   ...
   num1, num2 = num()   
   name = input('name: ')
   class_num = input('class: ')

if __name__ = '__main__':
    quiz()

在另一个脚本中,我想使用这个脚本和script.py定义的变量:

import script

script.quiz()

def path(class_num):
    ... 
    # do stuff

这一直在返回

  

'NameError:名称'class_num'未定义'

如何在第二个脚本中使用script.py中定义的所有变量?

5 个答案:

答案 0 :(得分:4)

您在脚本中定义了一个不返回任何内容的函数,需要返回用户输入定义的所有变量

def quiz():
    stuff
    name = input('...')
    class_num = input('...')
    return [stuff, name, class_num]

需要使用

更改其他脚本
results = script.quiz()

然后你解析results他们将包含测验答案

答案 1 :(得分:1)

您正在尝试将局部变量作为全局变量。{{if member.hasPaidThisYear 'V'}}在函数class_num中有一个范围,但不在其外部。

  

在Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置为变量赋值,则除非明确声明为全局,否则将其视为局部值。

错误

  

' NameError:name' class_num'未定义'

确切地告诉你,这个变量并不存在于它所调用的范围内。

要解决问题,只需更改

即可
quiz

并在您的其他脚本中捕获返回变量

def quiz()
   ...
   ...
   num1, num2 = num()   
   name = input('name: ')
   class_num = input('class: ')
   return class_num

答案 2 :(得分:1)

你可以使用这样的东西 在你的script.py中 返回class_num变量

def num():
    ...
    return num1, num2

def quiz()
   ...
   ...
   num1, num2 = num()   
   name = input('name: ')
   class_num = input('class: ')
   return class_num


if __name__ = '__main__':
    quiz()

并像这样使用

import script

class_num = script.quiz()

def path(class_var = class_num):
    ... 
    # do stuff

在你的代码中,你试图通过导入不正确的script.py来使用局部变量。

希望它可能有所帮助!

答案 3 :(得分:0)

Python不知道变量class_num是什么,因为它被困在quiz方法中。

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

如果您希望类名在函数外部可用,请将其返回

def quiz()
    ...
    ...
    num1, num2 = num()   
    name = input('name: ')
    class_num = input('class: ')
    return class_num  # <=======

在另一个剧本中

class_num = script.quiz()  # <=======

def path(class_num):
    ... 

如果您希望quiz中的其他变量可用,您有以下几种选择:

  • 多次退货,就像您对num方法
  • 所做的那样
  • 创建一些东西,包含所有数据,这些数据都算作一次返回。一个对象将是完美的,其他选项将是一个namedtuple或一个字典
  • 使用全局(请不要这样做)

答案 4 :(得分:0)

我修改了脚本以显示:a)其他人提到的返回值,b)缺少路径执行,返回值作为参数值。 这里我们有script.py

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

这里是something.py

import script

def path(class_num):
    pass
    # do stuff

class_n = script.quiz()
path(class_n)

我希望这可以说明它是如何运作的。您可能稍后在函数路径之外的某处使用变量class_num。这会给你一个NameError。