2017-08-07 63 views
3

我正在學習Python,現在我正在學習Python中的導入語句。我正在測試一些代碼,並且遇到了一些不尋常的事情。這是我正在測試的代碼。對於不同的模塊,導入語句的工作方式不同嗎?

from math import pow as power 
import random as x 

print(pow(2, 3)) 
print(power(2, 3)) 
print(x.randint(0, 5)) 
print(random.randint(0, 5)) 

我瞭解到,在Python中,你可以重新使用as模塊的名稱,所以我重新分配POW電源。我預計pow(2, 3)power(2, 3)輸出完全相同的東西,因爲我所做的只是更改名稱。但是,pow(2, 3)輸出8,這是一個整數,而power(2, 3)輸出8.0,這是一個浮點數。這是爲什麼?

此外,我還導入了random模塊,並將其名稱設置爲x。在pow和power的情況下,舊名稱pow和新名稱power都起作用。但是對於這個隨機模塊,只有新名稱x有效,舊名稱random不起作用。 print(x.randint(0, 5))工程,但random.randint(0, 5)不起作用。這是爲什麼?

任何人都可以請一個像Python這樣的新手解釋爲什麼我的代碼不按照我期望的方式工作嗎?如果有幫助,我正在使用Python版本3.62。

+1

因爲'pow'使用內建的'pow'函數。當你使用'as'時,它會將該函數綁定到該名稱。它不會導入'math.pow'並將其綁定到名稱'pow',它只會導入'math.pow',然後將它綁定到不同的名稱,例如'power'。 – Li357

+0

你的期望是錯誤的,當你使用as作爲另一個名字加載模塊/函數/類時。所以'隨機'不會工作。 'pow'的原因是,因爲python有一個內置的'pow'函數 –

回答

4

這是因爲當您導入pow數學power然後調用pow,該pow您呼叫是內置功能,而不是pow數學模塊。

對於random python沒有內置函數,所以你只能導入x之一。

戰俘內置功能documentation

+0

最精確的答案,雙重檢查,你不需要爲pow()工作導入數學! –

+0

那麼你是說數學模塊是一個內置函數,而隨機不是內置的?那麼,如果它不是內置的,我怎麼能使用隨機模塊呢?我並不完全理解這一點。你也可以請你清楚解釋爲什麼'pow'返回一個整數,而'power'返回一個浮點數?我迷路了。 – parrot15

+1

@ parrot15'pow'功能是內置的。 * math *模塊具有與內置函數不同的另一個'pow'函數,但是當您在導入它時將'math.pow'重命名爲* power *時,'math.pow'函數不會綁定到pow '。事情是有兩種不同的函數可以用作pow內置函數和**數學函數**中的函數,因爲您使用的是不同的名稱,所以兩者都單獨工作 –

0

當你使用你實際上是使用內置的戰俘功能戰俘。

但沒有所謂的隨機因而內置功能並不在Python工作

一般來說,如果你使用「爲」你只能用你導入它什麼是不是它最初被稱爲模塊

相關問題