接着

https://blog.csdn/jcf52/article/details/123213269https://blog.csdn/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)怎么来的,哈哈哈哈

更多推荐

函数的调用