函数就是变量,函数名就是变量名
变量可以作为函数参数
实参高阶函数:
def func3(x): print(x(1, 2)) func3(lambda m, n: m+n)系统提供的常见的实参高阶函数:
1.max、min、sorted都是实参高阶函数,有一个参数key需要传一个函数;被传入的函数需要一个参数和一个返回值,这个参数指向的是序列中的元素,返回值是比较对象
2.map函数: map(函数,序列) - 将序列中所有的元素按照函数指定的规则进行转换, 返回的是map的对象(map就是容器型数据类型中的一种)。 函数需要一个参数和一个返回值,参数指向的是序列中的元素,返回值就是用来替换原来元素的新元素
将列表list3中所有的元素都加1 -> [11, 21, 31, 41] new_list3 = map(lambda item: item+1, list3) print(new_list3, list(new_list3))3.reduce(函数,序列) - 对序列中的元素按照函数提供的功能进行累积的操作 函数需要两个参数,第一个参数是初始化或者上次运算的结果,y指向每一个元素 reduce(函数,序列, 初始值)
list3 = [10, 20, 30, 40] result = reduce(lambda x, y: x+y, list3) print(result)4.返回值高阶函数
def func1(): def func2(x, y): return x + y return func2 print(func1()(100, 200)) func2(100, 200)在不修改原函数的前提下给函数添加新的功能
装饰器的本质就是一个函数(这个函数是一个实参高阶函数也是返回值高阶函数)
无参装饰器的写法: def 函数名1(函数名2): def 函数名3(*agrs, **kwargs): 新功能代码 返回值 = 函数名2(*agrs, **kwargs) return 返回值 return 函数名3
说明: 函数名1 - 装饰器名字,命名的时候和这个装饰器要添加的功能进行关联 函数名2 - 随便命名,指向被添加功能的函数; 可以命名成 fn 函数名3 - 随便命名,在原函数上添加完新的功能以后产生的新的函数 新功能代码 - 实现新加的功能的代码
一个模块就是一个py文件,py文件的文件名就是模块名
1.哪些能用:所有在指定if语句外的全局变量都能用 2. 怎么使用:需要先导入模块 import 模块名 - 导入后可以使用所有在指定if语句外的全局变量;以’模块名.变量’ 来使用变量 from 模块名 impott 变量1, 变量2,… - 只可以使用这些指定的变量;直接使用变量 from 模块名 import * - *表示全部,可以使用所有在指定if语句外的全局变量(不推荐使用) from 模块名 as 新模块名 - 给模块取别名 from 模块名 import 变量名1 as 新变量名1,变量名2 - 给变量1取别名
当使用import或者from import导入模块的时候,系统会自动将被导入的模块中所有的代码都执行一遍
选择性导入:在被导入的模块中添加if语句:(if name == ‘main’😃,将不希望被其他模块执行的代码放在if语句中
每个模块都有一个属性叫__name__,这个属性是用来保存当前模块的名字。__name__默认值就是当前模块对应的py文件的文件名。当我们直接执行某个模块的时候,这个模块的__name__属性就会自动变成’main’
什么是包:包就是一种特殊的文件夹,文件都是py文件,自带一个__init__.py的文件