python基础——11(模块初识)
一、函数回调
# 提前写出函数的调用,再去考虑函数体的实现
# 怎么样提前写出函数的调用:在另一个函数中写出函数的调用
# 再去考虑函数体的实现:根据实际的需求
# 自定义一个sleep
def my_sleep(sec):
import time
current_time = time.time()
while time.time() - current_time < sec:
pass
def download(fn=None):
print("开始下载")
my_sleep(2)
data = '下载得到的信息'
print("下载完成")
if fn: # 如果外界提供了回调函数的实现体,再去调用,否则只完成下载的功能
res = fn(data) # 下载成功的回调函数,具体完成什么之后决定
if res:
print('操作成功')
return True
print("操作失败")
return False
return data # 没有外界具体操作下载结果的功能代码,就将下载结果直接返回
def download_action(data):
print("往文件里写")
with open('1.txt','w',encoding='utf-8') as f:
f.write(data)
return True
return False
res = download(download_action)
print(res)
# 下载成功后的动作可以多样化
def download_action1(data):
print(data)
return True
res = download(download_action1)
print(res)
二、模块
模块的四种存在方式
1、使用python编写的.py文件(任何一个py文件都可以作为模块)
2、包:一堆py文件的集合体
3、使用c编写并链接到python解释器的内置模块
4、已被编译为共享库或DLL的c或c++扩展
模块:一系列功能的集合体
定义模块:创建一个py文件就是一个模块,该py文件名就是模块名
使用模块:在要使用模块的文件中,通过 import 模块名 来导入模块
import module
1.编译执行模块所对应的py文件,会形成对应的pyc文件
2.产生该模块自己的全局名称空间
3.在使用该模块的全局名称空间中产生一个名字(导入的模块名)

注:
1.每一个文件都会产生自己的全局名称空间,且相互不影响
2.多次导入,只会编译执行模块一次,将其加载到内存,之后的都是直接对名字的引用
使用模块的优点:
1.从文件级别组织代码,是同特性的功能能统一管理
2.可以使用系统或第三方模块(拿来主义),来提高开发效率
三、取别名
通过as关键字可以给模块起别名: 模块名一旦起别名,原模块名就不能再使用
1.可以简化模块名字
import mmmmmmmmmmmmmmmmmm3 as my_m3
print(my_m3.num)
2.可以统一功能
cmd = input('数据库选择 1:mysql | 2:oracle:')
if cmd == '1':
import mysql as db
# mysql.excuse()
else:
import oracle as db
# oracle.excuse()
db.excuse()
from 模块名 import 名字1, 名字2, ..., 名字n
# 可以指名道姓导入模板中所有想导入的名字
from 模块名 import *
导入的是模块中的__all__这个列表
1、系统默认该列表不会收录_开头的名字
2、可以自定义__all__列表来规定外界通过*可以导入的名字
不建议直接导入 *,因为可读性差,且极容易出现变量重名
# 模块中有 名字a
from 模块名 import *
# 可以使用模块中的a
a = 20
# 模块中的a就被覆盖了,且在代码上还不能直接看出
起别名
from 模板名 import 名字1 as 别名1, ..., 名字n as 别名n
四、自执行与模块的区别
# __name__:
# 1.在py文件作为模块被使用时,__name__为模块名
# 2.在py文件自执行时,__name__为字符串 '__main__'
print("共有逻辑")
if __name__ == '__main__':
# 所有自执行的逻辑
print("m6: 我是自执行的")
a = 10 # 产生的是全局的名字
else:
# 所有模块的逻辑
print("m6: 我被导入执行的")
print(a) # 会报错:走else就不可能走if,所以a压根没产生
python基础——11(模块初识)的更多相关文章
- 1.7 Python基础知识 - 模块初识
在Python中有很多模块,模块对应的就是python源代码文件.模块中有Python程序自己附带的标准模块,还有很多其他人共享的第三方模块.模块中可以定义变量.函数和类.而多个功能类似的模块可以组织 ...
- python基础之模块初识
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持 一.time模块和datetime模块 和时间有关系的我们就要用到时间模块.在使用模 ...
- Day11 - Python基础11 模块学习——optparse
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- python基础——使用模块
python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- 十一. Python基础(11)—补充: 作用域 & 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- 『Python基础-11』集合 (set)
# 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...
- python 基础之 模块
Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...
- python基础(11)-常用模块
re(正则)模块 常用方法 findall() 以列表返回所有满足条件的结果 import re print(re.findall('\d','a1b2c2abc123'))#['1', '2', ' ...
随机推荐
- bzoj2740 串 && bzoj2176 strange string(最小表示法模板)
https://konnyakuxzy.github.io/BZPRO/JudgeOnline/2740.html 题解讲的很清楚了 (好像等于的情况应该归入case2而不是case1?并不确定) 具 ...
- DB2 函数
1.大小写转换 转大写UPPER 转小写LOWER
- Tomcat固定的目录结构
1. /work Tomcat把由Jsp生成的Servlet放于此目录下. 2. /webapps 当发布Web应用时,默认情况下把Web应用文件放于此目录下. 3. /logs 存放Tomcat的日 ...
- android开发学习 ------- android studio 同时用svn和git 进行代码管理 出现的问题
svn和git的工作机制: SVN 是集中式或者有中心式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要 ...
- bootstrop媒体对象、面板和Well
媒体对象 <div class="media"> <div class="media-left"> < ...
- javascript for/forEach
基本用法 for:for(var i=0;i<arr.length;i++) forEach:arr.forEach(function(value,index,arr){},),其中functi ...
- sqlserver 视图用 case when
视图用 case when 需要 用如下格式,[需要的列名]= case when...,而表里面的case 不用这样 [isNormal]=CASE WHENdbo.c_bdm_head.I_E_F ...
- ZOJ 3537 Cake (区间DP,三角形剖分)
题意: 给出平面直角坐标系上的n个点的坐标,表示一个多边形蛋糕,先判断是否是凸多边形,若否,输出"I can't cut.".若是,则对这个蛋糕进行3角形剖分,切n-3次变成n-2 ...
- (八)maven学习之继承
继承 如果项目划分了多个模块,都需要依赖相似的jar包,只需要创建一个父模块,在它的pom.xml文件中配置依赖的jar包.功能模块只需要继承父模块,就可以自动得到其依赖的jar包,而不需要再每个模块 ...
- 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商
10.1寸人机界面介绍: 配置铁电存储器:非易失性记忆体,掉电后数据不丢失. 连接云端,支持云服务:数据综合管理,更有效率. 静电防护技术:高强度抗干扰,防静电,防电磁干扰. 提供所有接口的调用源码, ...