博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python30 动态导入模块/断言
阅读量:7092 次
发布时间:2019-06-28

本文共 1962 字,大约阅读时间需要 6 分钟。

动态导入模块

方式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)执行结果:
#当前结果我们看到的虽然一样,但实际是有区别的;mod1 = __import__('code1') #当前只导入了code1这个路径mod2 = __import__('code1.aa') #这里虽然写的是'code1.aa',但是导入的只是code1这个路径print (mod1.aa)print (mod2.aa)执行结果:
#在这里可能认为我们定义变量的时候(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
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)执行结果:
#执行结果说明了当定义了,假如只定义了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 
assert type(obj) is intAssertionError#断言错误,就不会向下执行代码

当后面的代码完全依赖前面的条件时,就可以使用断言;

比如判断一个变量为整数后,才对这个变量(整数)进行加减乘除的计算,否则就报错。
或者判断银行转账之前,得确认余额足够,然后才会去执行转账动作。

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

转载于:https://blog.51cto.com/daimalaobing/2087347

你可能感兴趣的文章
async、await
查看>>
iScroll4插件的使用实例
查看>>
Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
查看>>
SMARTFORM报表程序设计(1)
查看>>
《深入理解Nginx》阅读与实践(二):配置项的使用
查看>>
js cookie
查看>>
.NET:动态代理的 “5 + 1” 模式
查看>>
《Java Concurrency》读书笔记,Java并发编程实践基础
查看>>
jQuery 2.0.3 源码分析Sizzle引擎 - 超级匹配
查看>>
ubuntu中查看各种设备和资源的命令汇总
查看>>
Chrome好用的扩展插件
查看>>
mtd-utils 及 ubi-utils 交叉编译
查看>>
Hyper-V如何应用新的网卡
查看>>
封装jQuery Validate扩展验证方法
查看>>
windows 版Tomcat 7.0的配置
查看>>
三级联动菜单
查看>>
Android之循环显示图像的Android Gallery组件
查看>>
解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记》[转]...
查看>>
如何隔離物件之間的相依性
查看>>
linux 下的爆破工具hydra
查看>>