[英]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
方法所做的那樣 我修改了腳本以顯示這兩個腳本: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.