我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python30 动态导入模块/断言

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python30 动态导入模块/断言

动态导入模块

方式1(解释器调用)

image_1c57etc0116atrcq196brr013o31p.png-5.7kB
根据当前目录结构进行动态导入模块设置

#在A1.py中

from code1 import aa  #使用该方式就可以导入aa这个模块
#在A1.py中

modname = 'aa'
from code1 import modname
#如果通过导入字符串的方式,来导入模块就会报错,因为modname = 'aa',只是一个字符串形式,不是一个模块
#在A1.py中

mod1 = __import__('code1')  #当前只导入了code1这个路径
mod2 = __import__('code1.aa')   #这里虽然写的是'code1.aa',但是导入的也只是code1这个路径
print (mod1)
print (mod2)

执行结果:
<module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
<module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
#当前结果我们看到的虽然一样,但实际是有区别的;

mod1 = __import__('code1')  #当前只导入了code1这个路径
mod2 = __import__('code1.aa')   #这里虽然写的是'code1.aa',但是导入的只是code1这个路径
print (mod1.aa)
print (mod2.aa)

执行结果:
<module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
<module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
#在这里可能认为我们定义变量的时候(mod2 = __import__('code1.aa')),是否加后面的'.aa'都是可以的,但请看下面的代码

#将mod2注释掉
mod1 = __import__('code1')
print (mod1.aa)

执行结果:
Traceback (most recent call last):
  File "E:/python/代码练习/A1.py", line 4, in <module>
    print (mod1.aa)
AttributeError: module 'code1' has no attribute 'aa'
#可以看到单独的mod1是没有定义后面的'.aa',所以这里无法调用mod1.aa;  上面的代码能调用那是因为mod2中已经定义了'.aa',所以mod1才可以调用的。

#将mod1注释掉
mod2 = __import__('code1.aa') 

print (mod2)
print (mod2.aa)

执行结果:
<module 'code1' from 'E:\\python\\代码练习\\code1\\__init__.py'>
<module 'code1.aa' from 'E:\\python\\代码练习\\code1\\aa.py'>
#执行结果说明了当定义了,假如只定义了2层路径时,第1层和第2层路径都是可以访问的,但是如果只定义了1层路径时,第2层路径是不能访问的(因为根本就不知道第2层路径的内容)。
#在aa.py中
class C:
    def __init__(self):
        self.name = 'zhangsan'

#在A1.py中        
mod1 = __import__('code1.aa')   
#这里虽然都是字符串格式,但却是可以通过__import__方式动态导入的

obj = mod1.aa.C()   #对aa.py中的class C生成一个实例
print (obj.name)

执行结果:
zhangsan

方式2

官方建议使用方式2来动态导入模块

import importlib #内置模块

aa = importlib.import_module('code1.aa')

print (aa.C().name)

断言

断言可以判断是否为真

obj = 'zhangsan'
assert type(obj) is str
#通过type(obj)来判断obj是一个字符串;为真的话,就继续向下执行代码。
print ('testtest')

执行结果:
testtest
obj = 'zhangsan'
assert type(obj) is int #断言obj为整数
print ('testtest')

执行结果:
Traceback (most recent call last):
  File "E:/python/代码练习/A2.py", line 4, in <module>
    assert type(obj) is int
AssertionError
#断言错误,就不会向下执行代码

当后面的代码完全依赖前面的条件时,就可以使用断言;
比如判断一个变量为整数后,才对这个变量(整数)进行加减乘除的计算,否则就报错。
或者判断银行转账之前,得确认余额足够,然后才会去执行转账动作。

断言与if类似,不过断言会进行报错来提示。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python30 动态导入模块/断言

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python30 动态导入模块/断言

动态导入模块方式1(解释器调用)根据当前目录结构进行动态导入模块设置#在A1.py中from code1 import aa #使用该方式就可以导入aa这个模块#在A1.py中modname = 'aa'from code1 import
2023-01-31

如何动态导入ECMAScript模块?

import { concat } from \'./concatModule\'使用ES模块的方式是静态的:意味着模块之间的依赖关系在编译时就已经知道了。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录