最近我大量使用math
模塊。我不想一直寫math.sqrt(x)
和math.sin(x)
。我想縮短它並寫入sqrt(x)
和sin(x)
。 如何?如何避免在python中導入模塊時一直寫模塊的名稱?
回答
對於更長的模塊名稱是很常見的縮短它們,例如
import numpy as np
然後您可以使用短名稱。或者你可以導入具體的東西,你需要,如在其他anwsers:
from math import sin, sqrt
這通常被用來包裝內,對於更加緊密耦合的代碼。對於圖書館來說,縮短名稱的第一個選項通常是首選方式。
你應該怎麼做從來沒有做的是使用from math import *
的形式。它會污染名稱空間,可能會導致名稱衝突並使調試更加困難。最重要的是它使代碼很難閱讀,因爲不清楚某個特定功能的來源。
交互式解釋程序可能會出現異常。但是,一旦你習慣使用縮短的名字,那麼可能不值得在那裏與另一個大會一起去。
可以導入這樣的:
>>> from math import sqrt, sin
>>> sqrt(100)
10.0
有從一個模塊直接進口的名字進入進口模塊的符號表import語句的一個變體。例如:
>>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
甚至還有一個變種導入模塊定義了可以在交互式解釋有用的所有名稱:
>>> from fibo import * >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
注意,在進口*從一般的做法模塊或軟件包是不贊成的,因爲它經常會導致代碼難讀。但是,可以使用它來保存交互式會話中的輸入。
from math import sin, sqrt
# Then you can just do
sqrt(4)
讓我補充一點,我認爲不僅from math import *
命名空間污染的情況下,而且還from math import cos
。這是因爲當您在模塊foo
的頂部執行此操作時,然後您使用import foo; print(dir(foo))
查看該模塊的命名空間,那麼您將在該列表中擁有一個項目cos
。通常情況下,這不是你想要的。
所以大多數時候我所有的進口產品看起來都像from math import cos as _cos
,這個領先的下劃線是傳統的印記,用來表示一個私人名字。這個想法是,從另一個模塊和打印輸出import foo; print(name for name in dir(foo) if not name.startswith('_'))
將導入那些在該模塊中定義爲公共名稱的名稱。
有一點需要注意:from math import cos as _cos; f = lambda x: _cos(x)
在功能上與import math; g = lambda x: math.cos(x)
不完全相同。不同之處在於,在python中,名稱解析發生在運行時,每次調用代碼。第一次導入時,名稱cos
只能解析一次;對math
模塊的任何後續更改都不會影響f()
。對於第二次導入,cos
將在每次調用時針對math
進行解析,因此對數學模塊的cos
方法的更改將傳播到g()
。當然,math
模塊既不會在運行時發生變化,也不會在運行時更改模塊的方法,這是一種特別值得推薦的編程技術。另一方面,一個模塊就像Python中的其他所有東西一樣,所以它總是能夠意識到引擎蓋下發生了什麼。
通常,from math import cos as _cos; f = lambda x: _cos(x)
是你想要的,它也比第二種形式快一點。
- 1. Python(2.7):如何避免導入的模塊出現在我的模塊中?
- 2. 如何將Python模塊導入與導入模塊名稱相同的包中?
- 3. python確定導入模塊的名稱
- 4. 如何避免在Python模塊系統中命名衝突?
- 5. Django導入模塊:無法通過名稱導入模塊
- 6. Python:導入一個模塊,但避免執行它?
- 7. python:導入與本地模塊名稱相同的另一個項目模塊
- 8. 如何嘲笑被測試模塊直接導入功能,而不在Python知道模塊的名稱
- 9. 在Python中導入模塊
- 10. 在Python中導入模塊
- 11. 在Python中導入模塊
- 12. 的Python:模塊的導入模塊
- 13. 僅在Python中不存在模塊時才導入模塊
- 14. Python指定從哪個模塊導入,如果有重複的模塊名稱?
- 15. 如何在python中導入sikuli模塊?
- 16. 導入模塊名稱衝突在Django
- 17. 如何使用Javascript ES6 ES2015模塊將常量直接導出/導入到導入模塊名稱空間?
- 18. 如何導入Python名稱空間包的所有子模塊?
- 19. 的Python:如何導入模塊中的其他模塊
- 20. 如何導入名稱與包裝中的模塊衝突的模塊?
- 21. Python模塊導入*
- 22. Python模塊導入
- 23. 導入Python模塊
- 24. Python導入模塊
- 25. python導入模塊
- 26. 覆蓋進口,模塊的顯示名稱導入模塊
- 27. python:我可以在模塊本身內導入模塊名稱空間嗎?
- 28. Python動態導入 - 如何從變量的模塊名稱中導入*
- 29. 在python中,如何通過模塊名稱的用戶輸入字符串導入模塊
- 30. 在導入模塊和方法的名稱在Python