[英]NameError when importing function from another script?
我很難從另一個腳本導入函數。 以下兩個腳本位於同一目錄中。 為什么另一個腳本中的函數不能處理具有相同名稱( arr
)的對象?
偶數
def find_evens():
return [x for x in arr if x % 2 == 0]
if __name__ == '__main__':
arr = list(range(11))
print(find_evens())
import_evens.py
from evens import find_evens
if __name__ == '__main__':
arr = list(range(11))
print(find_evens())
追溯
Traceback (most recent call last):
File "C:\Users\user\Desktop\import_evens.py", line 7, in <module>
find_evens()
File "C:\Users\user\Desktop\evens.py", line 2, in find_evens
return [x for x in arr if x % 2 == 0]
NameError: name 'arr' is not defined
python中的模塊具有單獨的命名空間。 合格名稱evens.arr
和import_evens.arr
是單獨的實體。 在每個模塊中,僅使用名稱arr
指向該模塊的本地名稱,因此import_evens
arr
實際上是import_evens.arr
。
由於您要在if __name__ ...
內部定義arr
,因此名稱arr
僅是在執行的模塊中定義的。 從未定義過evens.arr
名稱。
此外,沒有真正的全球名稱的概念。 名稱可以是模塊的全局名稱,因此名稱中的所有實體都可以使用它。 其他任何模塊仍必須將其尋址為a_module.global_variables_name
。 也可以from a_module import global_variables_name
,但這只是導入它並將其綁定到新的本地名稱的糖。
# same as `from a_module import global_variables_name`
import a_module
global_variables_name = a_module.global_variables_name
您所顯示的內容最好通過函數的參數來完成:
# evens.py
def find_evens(arr):
return [x for x in arr if x % 2 == 0]
# import_evens.py
if __name__ == '__main__':
arr = list(range(11))
print(find_evens(arr))
如果您認為最好使用全局變量,但又不了解語言如何使用全局變量,那么最好不要使用全局變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.