簡體   English   中英

在python中導入另一個腳本

[英]Importing another script in python

假設我有一個名為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中定義的所有變量?

您在腳本中定義了不返回任何內容的函數,需要返回由用戶輸入定義的所有變量

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

其他腳本需要更改

results = script.quiz()

然后您解析results ,其中將包含測驗答案

您正在嘗試使局部變量充當全局變量。 class_num在函數quiz具有范圍,但不在其范圍之內。

在Python中,僅在函數內部引用的變量是隱式全局的。 如果在函數體內任何位置為變量分配了值,除非明確聲明為全局變量,否則將假定該變量為局部變量。

錯誤

'NameError:名稱'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):

您可以使用類似這樣的東西在您的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來使用局部變量。

希望對您有所幫助!

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或一個字典
  • 使用全局變量(請不要這樣做)

我修改了腳本以顯示這兩個腳本: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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM