函数的调用

本文介绍了Python中函数的进阶用法,包括间接调用函数,如通过变量引用函数和将函数作为参数传递。还讲解了匿名函数的概念,使用lambda表达式创建简单的单行函数,并展示了其在不同场景下的应用,如作为参数、列表元素等。通过实例详细解析了lambda表达式的用法。
摘要由CSDN通过智能技术生成

接着

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)怎么来的,哈哈哈哈

C# 函数可以通过直接调用和间接调用来执行。直接调用是指在一个函数内部直接调用另一个函数,而间接调用是指使用委托或反射机制来调用函数。 直接调用函数是最常见的方法,可以通过函数名和参数列表来直接调用函数。例如: ```csharp public void MyFunction() { // 直接调用 AnotherFunction AnotherFunction(); } public void AnotherFunction() { // 实现代码 } ``` 相反,间接调用函数需要使用委托或反射机制。委托是一个可以存储对函数的引用的对象,可以将其传递给另一个函数,并在该函数调用函数。例如: ```csharp public delegate void MyDelegate(); public void MyFunction() { // 创建委托实例并传递 AnotherFunction MyDelegate del = new MyDelegate(AnotherFunction); // 通过委托调用 AnotherFunction del(); } public void AnotherFunction() { // 实现代码 } ``` 反射机制允许在运行时动态地调用函数,而不需要在编译时知道函数的名称。可以使用反射机制来获取函数的 MethodInfo 对象,并使用它来调用函数。例如: ```csharp public void MyFunction() { // 获取 AnotherFunction 的 MethodInfo 对象 MethodInfo mi = typeof(MyClass).GetMethod("AnotherFunction"); // 创建实例 object obj = Activator.CreateInstance(typeof(MyClass)); // 调用函数 mi.Invoke(obj, null); } public class MyClass { public void AnotherFunction() { // 实现代码 } } ``` 无论是直接调用还是间接调用,都可以用于执行函数并返回结果。直接调用更简单、更直接,但是间接调用更灵活,可以在运行时动态地调用函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值