Python_函数(2)

lambda表达式和匿名函数

  • lambda表达式可以用来声明匿名函数

  • lambda函数是一种简单的、在同一行中定义函数的方法。

  • lambda函数实际生成了一个函数对象。

  • lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。

lambda 函数的特点

  • lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
  • lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。

lambda 语法格式

lambda arg1,arg2,arg3...: <表达式>
  • lambda 是 Python 的关键字,用于定义 lambda 函数。
  • arg1,arg2,arg3为函数的参数,可以有多个参数,但必须在冒号前指定(lambda 函数也可以设置多个参数,参数使用逗号 , 隔开

  • <表达式> 是一个函数体,用于计算并返回函数的结果

实例

  1. 练习
    # a,b,c 表示形参,a+b+c 表示函数体
    a = lambda a,b,c:a+b+c
    print(a(10,12,13))  # ()表示调用函数
    
    b = [lambda m:m*2,lambda n:n*3,lambda s:s*4]
    print(b[0](6),b[1](2),b[2](7))
  2. lambda 函数没有参数
    f = lambda: "Hello, world!"
    print(f())  # 输出: Hello, world!
  3. 使用 lambda 创建匿名函数,设置一个函数参数 a,函数计算参数 a 加 10,并返回结果
    x = lambda a : a + 10
    print(x(5))    # 输出 15
  4. 使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果

    x = lambda a, b : a * b
    print(x(5, 6))    # 输出 30

eval()函数

功能

将字符串 str 当成有效的表达式来求值并返回计算结果

语法格式

eval(source[,globals[,locals]])->value
  • source:一个python表达式或函数compile()返回的代码对象

  • globals可选,必须是dictionary

  • locals可选,任意映射对象

注意:eval函数会将字符串当做语句来执行,因此会被注入安全隐患

递归函数

  • 递归是一种常见的算法思路,在算法中都会用到。如:深度优先搜索(DFS: Depth First Search)

  • 递归的基本思想是“自己调用自己”

含义

  • 递归函数是指:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。

  • 每个递归函数必须包含两个部分:

    1. 终止条件:表示递归什么时候结束,一般用于返回值不再调用自己

    2. 递归步骤:把第n步的值和第n-1步相关联。

注意递归函数由于会创建大量的函数对象,过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。

实例

def my_recursion(n):
    print('start:'+str(n))
    if n==1:
        print('recursion over')
    else:
        my_recursion(n-1)
    print("end:"+str(n))
my_recursion(3)

#输出
start:3
start:2
start:1
recursion over
end:1
end:2
end:3
  • 上述代码的递归函数整个调用过程

嵌套函数

嵌套函数就是内部函数

嵌套函数:在函数内部定义的函数

实例

def outer():
    print('outer running!!!')

    def inner():
        print('inner running!!!')
    inner()
outer()

使用嵌套函数的情况

  1. 封装-数据隐藏——外部无法访问“嵌套函数”

  2. 贯彻DRY(Don't Repeat Yourself)原则

  3. 嵌套函数,可以让我们在函数内部避免重复代码

  4. 闭包

nonlocal 和 global 关键字

含义

  • nonlocal用来内部函数中,声明外层的局部变量。

  • global函数内声明全局变量,然后才使用全局变量

实例

# 测试nonlocal、global关键字用法
a = 100
def outer():
    b = 10
    def inner():
        nonlocal b
        print('inner b:',b)
        b = 20

        global a
        a = 1000
    inner()
    print('outer b:',b)
outer()
print('a:',a)

LEGB规则

Python中查找“名称”时,是按照LEGB规则查找的:

  • Local 是指函数或类的方法内部

  • Enclosed 是指嵌套函数(一个函数包裹另一个函数,闭包)

  • Global 是指模块中的全局变量

  • Built in是指Python为自己保留的特殊名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值