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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章