Python函数(3)匿名函数递归函数全局变量局部变量

一、匿名函数

定义语法:
lambda 参数1,参数2,从参数3…:函数体

1.匿名函数函数体只有一句代码,并且该代码必须具有运行结果,运行结果会被作为函数的返回值自动返回

2.匿名函数因为没有函数名,因此通常是通过变量接收该函数,之后通过变量名(参数列表)来调用,

3.同时匿名函数因为只有一句话,因此匿名函数一般只用来解决比较简单的数据计算问题

第一种定义方案
num = (lambda x: x**2)(10)
print(num)

结果:

100
第二种定义方案
fun = lambda x: x**2
result = fun(10)
print(result)

结果:

100
示例1

定义一个匿名函数返回任意一个数字的奇偶性

fun =lambda x: x & 1 != 0
print(fun(10))

结果:

False
示例2
bookinfo = [('不一样的卡梅拉(全套)',22.50,120),('零基础学Android',65.10,89.80),('摆渡人',23.40,36.00),('福尔摩斯探案集',22.50,128)]
print('爬取到的商品信息:\n',bookinfo,'\n')
bookinfo.sort(key = lambda x:(x[1],x[1]/x[2]))  #优先按秒杀金额排序
print('排序后的商品信息:\n',bookinfo)

“”"
结果:

爬取到的商品信息:
 [('不一样的卡梅拉(全套)', 22.5, 120), ('零基础学Android', 65.1, 89.8), ('摆渡人', 23.4, 36.0), ('福尔摩斯探案集', 22.5, 128)] 

排序后的商品信息:
 [('福尔摩斯探案集', 22.5, 128), ('不一样的卡梅拉(全套)', 22.5, 120), ('摆渡人', 23.4, 36.0), ('零基础学Android', 65.1, 89.8)]

二、递归函数

示例1

定义一个递归函数完成n的阶乘操作

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)
result = factorial(5)
print(result)
#定义一个函数完成1-n所有数字的和
def sum(n):
    if n == 1:
        return 1
    else:
        return n + sum(n - 1)
result = sum(100)
print(result)

结果:

120
5050
示例2

定义一个递归函数求1-n所有奇数的和

def sum_jishu(n):
    if n == 1 or n == 2:
        return 1
    else:
        if n & 1 == 0:
            n -= 1
        return n  + sum_jishu(n - 2)
result = sum_jishu(5)
print(result)

结果:

9
示例3

定义一个递归函数求1-n所有偶数的和

def sum_oushu(n):
    if n >= 0:
        if n == 0 or n == 1:
            return 0
        elif n == 2:
            return 2
        else:
            if n & 1 != 0:
                n -= 1
            return n + sum_oushu(n - 2)
    else:
        raise ValueError('value is out range')
print(sum_oushu(3))

结果:

2

三、全局变量和局部变量

在函数定义过程中变量分为:
1、全局变量
2、局部变量:
全局变量:定义在函数外面的变量称为全局变量,全局变量的生命周期从变量定义开始直到程序运行结束
局部变量:定义在函数内部的变量称为局部变量,局部变量的生命周期只是在函数的内部有效,当函数调用结束之后变量自动被系统回收

在Python程序中变量的使用遵循就近原则,如果想要在函数内部使用全局变量,此时一定要提前使用global变量名,声明该变量是全局变量.
注意:全局变量使用存在风险,因此开发过程中一般以局部变量为主,只有在需要在不同函数中访问同一个数据时才会使用全局变量

示例
x = 20
def change(num):
    #global x
    x = 30
    num += 20
    print(num)
    print(x)
change(20)
print(x)

结果:

40
30
20
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章