接着
https://blog.csdn.net/jcf52/article/details/123213269https://blog.csdn.net/jcf52/article/details/123221654
来到了函数进阶:
一.间接调用函数
1.调用函数有直接使用函数名加参数列表的的形式调用,测量这种方式,还可以使用将函数名赋值给一个变量,再通过变量名加形参列表的方式进行间接的调用函数。
例子:
def fun(n):
if n == 0:
print("0")
sum = 1
for i in range(1,n+1): #range范围
sum =i*sum
print("计算阶乘%s值为:%s" % (n, sum))
s = int(input("请输入你想计算的数字阶乘:"))
r = fun
r(s)
fun(s)
现在呢学习一个新的!
2.一个函数作为另一个函数的参数
代码如下:
def output(mess):
print(mess)
def test(func,arg):
func(arg)
test(output,"hhhh")
3.函数名作为其他数据类型的元素
def print_out(mess):
print(mess)
list = [(print_out,"hhh"),(print_out,"love")]
for (fun,val) in list:
fun(val)
二.匿名函数
指函数是没有函数名称的,临时使用的微函数。使用 lambda 表达式
来声明,语法格式如下:
lambda [arg1 arg2 , ... , argn] : 表达式
应用场景:如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
注意:1.[arg1 ,arg2 , ... , argn ] 为函数的参数列表,可有可无
2.表达式: 表示函数体,必须有返回值
3.lambda 表达式只可以包含一个表达式,计算结果可看作是一个函数的返回值。
4.虽然不允许包含复杂的语句,但表达式可以调用其它函数。
例子:
sum = lambda num1, num2: num1 + num2
print(sum(4, 9))
解释:使用lambda 表达式声明匿名函数并赋值给sum,想等于这个函数有了函数名sum
相当于:
def sum(num1, num2):
return num1 + num2
2.lambda 表达式声明的匿名函数,也可以作为自己定义函数的实参
def fun(num1, num2, func):
return func(num1, num2)
print(fun(5, 4, lambda num1, num2: num1 + num2))
print(fun(5, 4, lambda num1, num2: num1 - num2))
3.带判断的lambda
fun = lambda a,b:a if a>b else b
print(fun(20,22))
4.lambda 表达式声明的匿名函数,也可以作为内建函数的实参
再这里引申一个内置函数 sorted:
5.lambda 表达式声明的匿名函数,也可以作为列表或字典的元素
power = [lambda x:x**2,lambda x:x**3,lambda x:x**4]
print(power[0](2),power[1](2),power[2](2))
lv = {1:lambda x:print(x),2:lambda x = "回头科科":print(x)}
lv[2]()
lv[1]("欢迎您")
仔细体会这个很有意思。
大家可以讨论一下power[0](2)怎么来的,哈哈哈哈