函数的进阶
一、匿名函数
匿名函数相关语法
语法:
函数名 = lambda 参数列表:返回值
相当于:
def 函数名(参数列表):
return 返回值
注意:
1)匿名函数只能实现用一句代码就可以完成功能的函数
2)匿名函数在调用的时候和普通函数没有区别
3)匿名函数的参数不能使用冒号语法来说明类型
sum1 = lambda num1, num2: num1 + num2
print(sum1(10, 20))
二、变量作用域
变量作用域 - 指的就是变量能够使用的范围
根据变量作用域的不同,将变量分为:全局变量和局部变量
1.全局变量
全局变量指没有定义在函数里面或者类里面的变量,全局变量的作用域是从定义开始直至程序结束。
2.局部变量
局部变量指定义在函数里面的变量,其中:形参也属于局部变量
3.函数调用过程(内存变化)
每次在调用函数的时候,系统会自动在栈区间为这个函数开辟一个临时内存区域,用来储存在函数中定义的局部变量。
当函数调用结束的时候,系统会自动释放该内存,导致局部变量消失。
**注意:**在函数中可以使用全局变量
4. global和nonlocal
global和nonlocal只能在函数体中使用。
global ---- 1)在函数中修改全局变量的值,需要在前面用global对变量进行说明;
2)在函数中定义一个全局变量,需要在前面用global对变量进行说明。
nonlocal ---- 如果需要在局部的局部修改一个局部变量的值,就需要使用nonlocal进行说明
m = 100
def func3():
global m
m = 200
global x
x = 'abc'
func3()
print(m, x)
首先需要意识到函数的本质是变量,Python中定义函数就是定义类型是function的变量,其中函数名就是变量名。
# func8和func9是实参高阶函数 - 因为这两个函数的参数中有函数
def func8(x):
print(x())
def func9(x):
print(x(10) / 2)
# func10是返回值高阶函数 - 因为func10的返回值是函数
def func10():
def func11():
print('hello')
return 100
return func11
print(func10()())
三、常用的实参高阶函数
1)max、min、sorted
max(序列,key=函数)
函数要求:a.有且只有一个参数(这个参数指向的是前面序列中的每个元素)
b.有一个返回值(返回值就是比较对象)
nums = [89, 78, 90, 23, 67, 81]
print(max(nums))
# 求nums中个位最大的元素
nums = [89, 78, 90, 23, 67, 81]
def item(x):
return x % 10
print(max(nums, key=item))
print(max(nums, key=lambda item: item % 10))
# max的实现原理
def lx_max(seq, *, key=None):
if key:
seq = list(seq