一、匿名函數
定義語法:
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