我想從一個函數內部導入一個模塊,並讓它可用於我的整個文件,就像我在外部導入任何函數之前以及在所有其他代碼之前一樣。它在函數中的原因是因爲我對腳本的結構沒有太多的控制。這是可能的,而不訴諸於黑客__builtin__或傳遞我所需要的全部代碼?是否可以從函數(Python)中導入到全局範圍?
8
A
回答
9
如何像globals()["os"] = __import__("os")?
我想這一點,如果你想因爲模塊名稱是一個字符串可以被包裹在一個通用的功能。
+0
這是很好的,因爲索引可以用來模擬「import import」行爲,而不是(我相信)內置到'__import __()'中。事實證明,這並不能解決我的問題,但它確實回答了我問的問題。 – scott77777 2011-06-14 18:10:10
7
看到您的新評論,我想強調這聽起來沒有必要。您實際上是通過在函數內導入來修改腳本更多,而不是通過以正常方式導入腳本的頂部。儘管如此,本着回答問題的精神,我將離開我以前的答案。
我誠實不能肯定這是做了正確的方式,但快速檢查確認,如果你在導入之前的函數內聲明模塊名作爲global
,它被導入到全局命名空間。
>>> def import_re():
... global re
... import re
...
>>> re
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 're' is not defined
>>> import_re()
>>> re
<module 're' from '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc'>
不要這樣做,除非你真的必須 - 然後用紅色大寫字母來寫。
相關問題
- 1. 我可以在python中導入全局函數嗎?
- 2. 是否可以在全局範圍內設置qmake調試?
- 3. 如何從全局範圍調用jQuery範圍內的函數?
- 4. 嵌套函數可以放在Javascript的全局範圍內嗎?
- 5. Python全局變量範圍
- 6. 在C函數中聲明的函數是否可以在全局範圍內使用?
- 7. 從Python全局範圍解析變量
- 8. 是否有可能使php全局在函數範圍內自動提供?
- 9. 是一個全局範圍的函數內的JavaScript函數?
- 10. 從全局範圍訪問函數內定義的函數?
- 11. Javascript函數未訪問全局範圍?
- 12. 全局範圍內的函數
- 13. 全局()函數內部範圍
- 14. Python「導入」範圍
- 15. 爲什麼我可以從全局範圍調用私有構造函數?
- 16. 如果我可以在node-mysql的回調函數中執行「require」,模塊函數是否會添加到回調範圍或全局範圍?
- 17. 是否可以模擬從golang包中導入的函數?
- 18. 是否可以在Python中的函數中定義全局變量
- 19. 使用boost-python執行python函數(不是全局範圍語句)
- 20. 是否可以在函數中使用非全局變量?
- 21. 函數內部從文件到全局範圍的點源函數
- 22. 是否有像php中的全局範圍魔術方法__call()函數?
- 23. 全局函數是否可以使用塊參數?
- 24. 是否可以限制javascript函數的範圍?
- 25. 是否可以在函數範圍內聲明/實現模板?
- 26. Python函數範圍
- 27. Python範圍函數
- 28. 在Python中導入的模塊/函數的範圍
- 29. 全局變量在函數範圍內是未定義的
- 30. 如何從函數調用具有全局範圍的新類
不要這樣做,如果你關心下一個必須閱讀你的代碼的人(可能是你自己)。聽起來你正在使用糟糕的組織實踐作爲糟糕的編碼實踐的藉口;嘗試解決根本原因。 – msw 2011-06-14 17:35:17
我正在修改一個開源項目並嘗試更改必要的絕對最小值。 – scott77777 2011-06-14 17:36:26
所以通過嘗試改變必要的最低限度,你會讓所有其他貢獻者感到難以理解。這是一個糟糕的折衷。 – msw 2011-06-14 17:43:53