千锋教育python2104期总结
第十一次总结: 函数进阶
目录
- 匿名函数
- 变量作用域
- 函数就是变量
- 常用实参高阶函数
- map和reduce
- 作业
正文
1.匿名函数
- 匿名函数
语法:
函数名 = lambda 参数列表: 返回值
相当于:
def 函数名(参数列表):
return 返回值
注意:
1)匿名函数只能实现用一句代码就可以完成功能的函数
2)匿名函数在调用的时候和普通函数没有区别
3)匿名函数的参数不能使用冒号语法来说明类型
sum1 = lambda num1, num2=10: num1 + num2
print(sum1(10, 20))
print(sum1(num1=100, num2=200))
print(sum1(5))
2.变量作用域
变量作用域 - 指的就是变量能够使用的范围
根据变量作用域的不同将变量分为:全局变量和局部变量
- 全局变量
没有定义在函数里面或者类里面的变量就是全局变量;
全局变量的作用域是从定义开始到程序结束。
2.局部变量
定义在函数里面的变量是局部变量(形参也是局部变量);
局部变量的作用域是从定义开始到函数结束。
3.函数调用过程(内存的变化)
每次在调用函数的时候,系统会自动在栈区间为这个函数开辟一个临时内存区域,用来存储在函数中定义的局部变量。
当函数调用结束的时候系统会自动释放这块内存。
“”“1.全局变量”""
a、b、c都是全局变量
a = 100
for b in range(10):
print(b)
c = 20
print(f'循环里面使用a:{a}')
print(f'循环外面使用b和c:{b}, {c}')
def func1():
print(f'函数中使用a、b、c:{a}, {b}, {c}')
func1()
“”“2. 局部变量”""
def func2(x):
y = 100
for z in range(10):
pass
print('函数结束')
print(f'函数里使用x, y, z:{x}, {y}, {z}')\
func2(20)
# print(f'函数外面使用x,y,z:{z}') # 报错
“”"
4. global和nonlocal - 只能在函数体中使用
global - 1)在函数中修改全局变量的值,需要在前面用global对变量进行说明;
2)在函数中定义一个全局变量,需要在前面用global对变量进行说明。
global 变量名
(了解)nonlocal - 如果需要在局部的局部修改一个局部变量的值,就需要使用nonlocal进行说明
m = 100
n = 100
def func3():
m = 200
global n
n = 200
print(f'函数中m:{m}')
print(f'函数中n:{n}')
global x
x = 'abc'
func3()
print(f'函数外面 m:{m}')
print(f'函数外面 n:{n}')
print(f'函数外面 x:{x}')
3.函数就是变量
python中定义函数就是定义类型是function的变量,函数名就是变量名
func1 = lambda x: x*2
print(type(func1)) # <class 'function'>
相等于:
def func1(x):
return x*2
def func2():
print('函数!')
a = 10
print(type(a)) # <class 'int'>
print(type(func2)) # <class 'function'>
print(id(a))
print(id(func2))
变量作为函数的参数
def func3(x):
print(f'x:{x}')
def func4():
print('函数4')
func3(199)
num = 200
func3(num)
func3(func4)
4.常用实参高阶函数
1.常用实参高阶函数
max、min、sorted/sort
map
reduce
“”"
“”“1)max、min、sorted
max(序列, key=函数)
函数要求:a. 有且只有一个参数(这个参数指向是前面序列中的每个元素)
b. 有一个返回值(返回值就是比较对象)
“””
nums = [89, 78, 90, 23, 67, 81]
print(max(nums))
"