自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间(namespace),并且在该命名空间中执行与.py文件相关的所有语句。在执行时,需在具体的变量、函数和类名前加上“模块名.”前缀。如果不想在每次导入模块时都创建一个新的命名空间,而是将具体的定义导入到当前的命名空间中,这时可以使用from…import语句。使用from…import语句导入模块后,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可。
说明:命名空间可以理解为记录对象名字和对象之间对应关系的空间。目前Python的命名空间大部分都是通过字典(dict)来实现的。其中,key是标识符;value是具体的对象。例如,key是变量的名字,value则是变量的值。
from…import语句的语法格式如下:
from modelname import member
参数说明:
l modelname:模块名称,区分字母大小写,需要和定义模块时设置的模块名称的大小写保持一致。
l member:用于指定要导入的变量、函数或者类等。可以同时导入多个定义,各个定义之间使用逗号“,”分隔。如果想导入全部定义,也可以使用通配符星号“*”代替。
多学两招:在导入模块时,如果使用通配符“*”导入全部定义后,想查看具体导入了哪些定义,可以通过显示dir()函数的值来查看。例如,执行print(dir())语句后将显示类似下面的内容。
['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'change', 'getHeight', 'getWidth']
其中change、getHeight和getWidth就是我们导入的定义。
例如,通过下面的3条语句都可以从模块导入指定的定义。
from bmi import fun_bmi # 导入bmi模块的fun_bmi函数
from bmi import fun_bmi,fun_bmi_upgrade # 导入bmi模块的fun_bmi和fun_bmi_upgrade函数
from bmi import * # 导入bmi模块的全部定义(包括变量和函数)
注意:在使用from…import语句导入模块中的定义时,需要保证所导入的内容在当前的命名空间中是唯一的,否则将出现冲突,后导入的同名变量、函数或者类会覆盖先导入的。这时就需要使用import语句进行导入。
实例02 导入两个包括同名函数的模块
创建两个模块,一个是矩形模块,其中包括计算矩形周长和面积的函数;另一个是圆形,其中包括计算圆形周长和面积的函数。然后在另一个Python文件中导入这两个模块,并调用相应的函数计算周长和面积。具体步骤如下:
(1)创建矩形模块,对应的文件名为rectangle.py,在该文件中定义两个函数,一个用于计算矩形的周长,另一个用于计算矩形的面积,具体代码如下:
def girth(width,height):
'''功能:计算周长
参数:width(宽度)、height(高)
'''
return (width + height)*2
def area(width,height):
'''功能:计算面积
参数:width(宽度)、height(高)
'''
return width * height
if __name__ == '__main__':
print(area(10,20))
(2)创建圆形模块,对应的文件名为circular.py,在该文件中定义两个函数,一个用于计算圆形的周长,另一个用于计算圆形的面积,具体代码如下:
import math # 导入标准模块math
PI = math.pi # 圆周率
def girth(r):
'''功能:计算周长
参数:r(半径)
'''
return round(2 * PI * r ,2 ) # 计算周长并保留两位小数
def area(r):
'''功能:计算面积
参数:r(半径)
'''
return round(PI * r * r ,2) # 计算面积并保留两位小数
if __name__ == '__main__':
print(girth(10))
(3)创建一个名称为compute.py的Python文件,在该文件中,首先导入矩形模块的全部定义,然后导入圆形模块的全部定义,最后分别调用计算矩形周长的函数和计算圆形周长的函数,代码如下:
from rectangle import * # 导入矩形模块
from circular import * # 导入圆形模块
if __name__ == '__main__':
print("圆形的周长为:",girth(10)) # 调用计算圆形周长的函数
print("矩形的周长为:",girth(10,20)) # 调用计算矩形周长的函数
执行compute.py文件,将显示如图4所示的结果。
图4 执行不同模块的同名函数时出现异常
从图4中可以看出执行步骤(3)的第5行代码时出现异常,这是因为原本想要执行的矩形模块的girth()函数被圆形模块的girth()函数给覆盖了。解决该问题的方法是,不使用from…import语句导入,而是使用import语句导入。修改后的代码如下:
import rectangle as r # 导入矩形模块
import circular as c # 导入圆形模块
if __name__ == '__main__':
print("圆形的周长为:",c.girth(10)) # 调用计算圆形周长的函数
print("矩形的周长为:",r.girth(10,20)) # 调用计算矩形周长的函数
执行上面的代码后,将显示如图5所示的结果。
图5 正确执行不同模块的同名函数