python基礎系列:
python自學篇一[ Anaconda3安裝 ]
python自學篇二[ pycharm安裝及使用 ]
python自學篇三[ 判斷語句if的使用 ]
python自學篇四[ 基本數據類型和字符串常用處理 ]
python自學篇五[ 列表 ]
python自學篇六[ 元組 ]
python自學篇七[ 字典+深拷貝與淺拷貝 ]描述
python自學篇八[ 循環:while+for+pass+range()+推導式 ]
python自學篇九[ 函數(一):參數+對象 ]
python自學篇九[ 函數(二):返回值return+yield+迭代器+生成器 ]
python自學篇九[ 函數(三):變量作用域+ATM+5個小練習 ]
python自學篇九[ 函數(四):遞歸函數+匿名函數+內置函數+高階函數 ]
python自學篇十[ 面向對象 (一) :面向對象概念+定義類+練習一]
python自學篇十[ 面向對象 (二) :繼承+多繼承+類屬性+實例屬性]
python自學篇十[ 面向對象 (三) :訪問限制+類方法+靜態方法]
python自學篇十[ 面向對象 (四) :王者榮耀小遊戲+模擬一個簡單的銀行進行業務辦理的類]
python自學篇十一[ 模塊簡介+模塊製作+dir()函數+標準模塊+包]
python自學篇十二[ 文件:打開+讀取+寫入+3個習題]
遞歸函數
- 遞歸函數:遞歸就是子程序(或函數)直接調用自己或通過一系列調用語句間接調用自己,是一種描述問題和解決問題的基本方法。(一句話,自己調用自己)
- 舉例,計算階乘 n! = 1 * 2 * 3 * … * n,用函數 fact(n)表示,可以看出:
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
…
n! = n × (n-1)! - 同樣的,可以把遞歸看作一場夢,做夢的時候夢到自己在做夢,夢中的自己正在做夢···,或者是鏡子裏面看見有個鏡子,裏面有自己,一層一層的。
- 求階乘
def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
print(factorial(10))
結果:
3628800
匿名函數
- 定義函數的過程中,沒有給定名稱的函數就叫做匿名函數;Python中使用lambda表達式來創建匿名函數
lambda 來創建匿名函數規則:
-
lambda只是一個表達式,函數體比def簡單很多
-
lambda的主體是一個表達式,而不是一個代碼塊,所以不能寫太多的邏輯進去
-
lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間裏的參數
-
lambda定義的函數的返回值就是表達式的返回值,不需要return語句塊
-
lambda表達式的主要應用場景就是賦值給變量、作爲參數傳入其它函數
-
lambda匿名函數的表達式規則是:
lambda [參數列表]: 表達式
例如:
a=lambda :'我愛你'
print(a())
結果:
我愛你
- 帶參數的lambda
s = lambda x: x*2
print(s(3))
結果:
6
- 多參數lambda
s = lambda x,y: x+y
print(s(3,4))
結果:
7
矢量化的三元運算符
- 原來:
if 條件:
代碼塊哦
else:
代碼塊
- 矢量化的三元運算符
條件成立的內容 if 條件 else 條件不成立的內容
如:
s = lambda x,y: x if x > 2 else y
print(s(1,4))
常用內置函數
- 字典排序
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items())
print(dic)
結果:
[(‘a’, 1), (‘b’, 3), (‘c’, 2)]
- 倒序排序
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items(),reverse= True)
print(dic)
結果:
[(‘c’, 2), (‘b’, 3), (‘a’, 1)]
- 列表推導式
dic = {'a':1,'c':2,'b':3}
dic = sorted(dic.items()) #通過內置函數 sorted進行排序內置函數有返回值 默認通過KEY排序
print({k:v for k,v in dic}) #列表推導式輸出
結果:
{‘a’: 1, ‘b’: 3, ‘c’: 2}
- 通過lambda按指定元素排序
dic = sorted(dic.items(),key = lambda x:x[1])
#x:x[1]是指 [('c', 2), ('b', 3), ('a', 1)]中每個元組中的索引值爲1的元素,即2,3,1
lsit01 = [
{'name':'joe','age':18},
{'name':'susan','age':19},
{'name':'tom','age':17}
]
dic = sorted(lsit01,key = lambda x:x['age'],reverse=True) #內置函數有返回值 默認通過KEY排序
print(dic)
#按照age從大到小排序
結果:
[{‘name’: ‘susan’, ‘age’: 19}, {‘name’: ‘joe’, ‘age’: 18}, {‘name’: ‘tom’, ‘age’: 17}]
常用高階函數
map
#map
list01 = [1, 3, 5, 7, 9]
list02 = [2, 4, 6, 8, 10]
new_list = map(lambda x, y: x*y, list01, list02)
print(list(new_list))#將map對象轉換爲list
結果:
[2, 12, 30, 56, 90]
filter
#filter
list02 = [2, 4, 6, 8, 10]
new_list = filter(lambda x: x > 4, list02) #filter將不符合條件的元素過濾掉
print(list(new_list))
結果:
[6, 8, 10]
reduce
#reduce
from functools import reduce
list02 = [2, 4, 6, 8, 10]
new_list = reduce(lambda x, y: x+y, list02, 0)#0爲x的初始值,先把0給x,2給y,再把結果給x,4給y,依次進行,類似求和
print(new_list)
結果:
30
高階函數使用三個案例
案例一:格式化用戶的英文名,要求首字母大小,其它字母小寫
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
new_name = map(lambda x:x.title() ,name)
new_name = list(new_name)
print(new_name)
結果:
[‘Joe’, ‘Susan’, ‘Black’, ‘Lili’]
案例二:將用戶英文名、年齡、性別三個集合的數據結合到一起,形成一個元組列表
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
print(new_users)
結果:
[(‘joe’, 18, ‘m’), (‘susan’, 19, ‘w’), (‘black’, 20, ‘m’), (‘lili’, 21, ‘w’)]
案例三:過濾性別爲男的用戶
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
print(new_users)
new_users = filter(lambda x:x[2] == 'm',new_users)
new_users = list(new_users)
print(new_users)
結果:
[(‘joe’, 18, ‘m’), (‘susan’, 19, ‘w’), (‘black’, 20, ‘m’), (‘lili’, 21, ‘w’)]
[(‘joe’, 18, ‘m’), (‘black’, 20, ‘m’)]
案例四:求性別爲男的用戶的平均年齡
name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users = list(users)
#print(new_users)
#
# new_users = filter(lambda x:x[2] == 'm',new_users)
# new_users = list(new_users)
# print(new_users)
from functools import reduce
total_age = reduce(lambda x,y:x+y[1],new_users,0)
print(total_age/len(new_users))
結果:
19.5