模块
1、一个py就是一个模块
2、包就是一个存放有__init__.py文件的文件夹,包的本质就是一个模块
三种来源:
1、自带的
内置
标准库
2、第三方的
pip3 install 第三方库
3、自定义的
在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果
1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
2.在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
3.创建名字spam来引用该命名空间
import
import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次'from the spam.py',当然其他的顶级代码也都被执行了,只不过没有显示效果.
用import语句导入多个模块,可以写多行import语句 (不介意采用)
import module1
import module2
还可以在一行导入,用逗号分隔开不同的模块
import module1,module2,
from-import
from...import...与import语句基本一致,唯一不同的是:使用import foo导入模块后,引用模块中的名字都需要加上foo.作为前缀,可以在当前执行文件中直接引用模块foo中的名字
from foo import * #把foo中所有的名字都导入到当前执行文件的名称空间中,在当前位置直接可以使用这些名字
import foo as f #为导入的模块foo在当前位置起别名f,以后再使用时就用这个别名f
搜索模块的路径与优先级
模块搜索路径优先级从高到低
1、内存
2、内置
3、sys.path
from aaa.bbb.ccc import spam # 导入语句中出现的点,代表路径分隔符
spam.money # 使用语句中出现的点,代表问某一个名称空间要名字
编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行
二:模块,文件中存放着一堆功能,用来被导入使用
python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
foo.py被当做脚本执行时运行的代码
else:
foo.py被当做模块导入时运行的代码
匿名函数
什么是匿名函数?
匿名函数就是没有名字的函数
为何要用匿名函数?
用于临时使用一次的场景
如何定义匿名函数?
def foo(x, y):
return x + y
# f = lambda x, y: x + y
# print(f)
# print(f(1,2)) 无必要这样方式
# res = (lambda x, y: x + y)(1, 2)
# print(res)
max,用法
salaries = {
"axx": 30000000,
"bgon": 3000,
"zxx": 1000
}
# print(max(salaries))
def f(name):
return salaries[name]
# print(max(salaries,key=f))
# print(max(salaries,key=lambda name:salaries[name]))
# print(min(salaries,key=lambda name:salaries[name]))
# print(sorted(salaries))
# print(sorted(salaries,key=lambda name:salaries[name]))
# names = ['lxx', "hxx", "wxx"]
# # res=[name+"_vip" for name in names]
# # res=(name+"_vip" for name in names)
#
# res = map(lambda name:name+"_vip",names)
# print(res)
# print(list(res))
filter,
# filter()
# names = ['lxx', "hxx_vip", "wxx_vip"]
# # res = [name for name in names if name.endswith('_vip')]
# # print(res)
#
#
# res=filter(lambda name:name.endswith('_vip'),names)
# print(res)
# print(list(res))
reduce
# reduce()
from functools import reduce
# res = reduce(lambda x, y: x + y, [1, 2, 3, 4],100)
res = reduce(lambda x, y: x + y, ["a", "b", "c", "d"], "xxx")
print(res)