2017-08-07 27 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工作

一般来说,如果你使用“为”你只能用你导入它什么是不是它最初被称为模块

相关问题