初始模块
匿名函数
匿名函数就是没有名字的函数
一次性使用,随时使用随时定义
与(max,min,sorted,map,reduce,filter)联合使用
例:
"""
需求: 找出工资最多的人
"""
salaries = {
"axx": 30000000,
"bgon": 3000,
"zxx": 1000
}
def f(name):
return salaries[name]
print(max(salaries,key=f))
# 这个是基于普通的方法实现,max可以跟两个参数,一个是一个可迭代对象,还有一个是函数
# 上述代码意思是,max比较大小,字典参与比较的是字典的k值,后面用一个函数做接受,可以把字典的k值传给这个函数,继而得到新资。
print(max(salaries,key=lambda name:salaries[name]))
# 这个定义一个匿名函数
min,sorted用法同上
names = ['lxx', "hxx", "wxx"]
print(list(map(lambda name:name + '_vip', names)))
# map(函数, 可迭代对象)
# 从names里面取出一个值,传给这个匿名函数,做一个字符串拼接,
# 上述需求,用列表生成式依旧可以达到
# 生成的是一个map对象,
names = ['lxx', 'hxx_vip', 'wxx_vip']
print(list(filter(lambda name:name.endswith('_vip'), names)))
from functools import reduce
print(reduce(lambda x,y:x+y, [1,2,3,4,],100))
# reduce(匿名函数,一个可迭代对象,累加的初始值)
模块
自定义模块:
一个py文件就是一个模块
包是一个存放有__init__.py文件的文件夹
模块有三种来源:
自带的
内置
标准库
第三方库
pip3 install ...
自定义的
一个py文件的两种用途
一个py文件有两种用途:
其一: 执行文件
其二: 被导入的模块
具体区分就看有没有if __name__ == '__main__': 有则是运行文件,无则用来被导入
模块的导入
import...
from...import...
首次导入模块发生的三件事
"""
1.产生执行文件的名称空间。
2.产生模块的名称空间,以及模块内变量的名称空间
3.调用名称空间
"""
两者导入的优缺点:
import: 指名道姓,但是写起来麻烦
from...import...: 写起来不麻烦,但是容易与当前文件的变量名冲突
两者都可以用as起别名
from...import *
导入一个文件中的所有名称空间。
可以使用__all__来控制*
解决循环导入的三种方式
1. 解决循环导入的根本解决方法就是不要出现循环导入问题。
2. 将需要循环导入共享的数据提上去,提到导入之前
3. 用一个函数封装循环导入,利用了函数在定义阶段只检测语法不执行代码的特性。
模块搜索路径
内存---> 内置----> sys.path路径下的文件夹
# from aaa.bbb.ccc import spam # 导入语句中出现的点,代表路径分隔符
# spam.money # 使用语句中出现的点,代表问某一个名称空间要名字