使用from…import语句导入模块

自学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语句进行导入。

图标 (35)

  实例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  正确执行不同模块的同名函数

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值