
嗨!朋友,我是酷頭
歡迎來到學習python的寶藏基地~~~
今天給大家介紹python的幾種高級函數,一起來看看吧!
Lambda 函數
Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。
Python 函數通常使用如下樣式來定義,
deffunction_name():
pass
但對于 lambda 函數,我們根本沒為它命名。這是因為 lambda 函數的功能是執(zhí)行某種簡單的表達式或運算,而無需完全定義函數。
lambda 函數可以使用任意數量的參數,但表達式只能有一個。
下面我們來看一下普通函數和lambda函數的區(qū)別
普通函數求圓面積
#?求圓面積
importmath
defcirclearea(r):
result?=?math.pi*r*r
returnresult
r?=10
print('圓面積為:',?circlearea(r))
'''
圓面積為:314.1592653589793
'''
lambda函數求圓面積
#?求圓面積
importmath
r?=10
result?=lambdar:math.pi*r*r
print('圓面積為:',?result(r))
'''
圓面積為:314.1592653589793
'''
再來看看lambda函數在列表推導式中的那些使用
指定范圍內的數值列表
importrandom
#?生成10-100之間的隨機列表
list??=?[random.randint(10,100)forxinrange(10)]
print(list)
'''
[83,?95,?16,?43,?66,?24,?11,?92,?38,?85]
'''
根據列表條件生成指定的列表
#?每月拿出月薪的30%存定期
salary?=?[8000,8100,8200,8500,7800,7988,8888]
save_sal?=?[int(x*0.3)forxinsalary]
print('每月存款數目:',?save_sal)
'''
每月存款數目:?[2400, 2430, 2460, 2550, 2340, 2396, 2666]
'''
通過列表篩選生成新的列表
#?找出成績大于等于80的學生
score?=?[80,81,72,75,98,79,88]
result?=?[xforxinscoreifx?>=80]
print('成績大于等于80的學生:',?result)
'''
成績大于等于80的學生:?[80, 81, 98, 88]
'''
看它多么簡單!我們執(zhí)行了一些簡單的數學運算,而無需定義整個函數。這是 Python 的眾多特征之一,這些特征使它成為一種干凈、簡單的編程語言。
lambda函數還可以跟一些內置函數一起使用,接下來一起看看吧!
filter()函數
filter()?函數用于通過指定條件過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象,如果要轉換為列表,可以使用 list()?來轉換。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判斷,
然后返回 True 或 False,最后將返回 True 的元素放到新列表中。
語法如下:
filter(function,?iterable)
方法1:求出當前列表內的所有奇數
#?取出列表內所有奇數
defif_odd(n):
returnn?%2==1
odd_list?=?list(filter(if_odd,?[8,9,7,5,7,6,2,4,3]))
print(odd_list)
'''
[9,?7,?5,?7,?3]
'''
方法2:求出當前列表內的所有偶數
#?取出列表內所有偶數
list_num?=?[8,9,7,5,7,6,2,4,3]
list_even?=?list(filter(lambdax:?x?%2==0,?list_num))
print(list_even)
'''
[8,?6,?2,?4]
'''
map()函數
和filter()函數類似,map()?會根據提供的函數對指定序列做映射。
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
map() 函數語法:
map(function,?iterable,?...)
#?求平方
defsquare(x):
returnx*x
new_list?=?list(map(square,?[8,9,7,5,7,6,2,4,3]))
print(new_list)
'''
[64,?81,?49,?25,?49,?36,?4,?16,?9]
'''
或者使用lambda表達式
#?求平方
new_list1?=?list(map(lambdax:x*x,?[8,9,7,5,7,6,2,4,3]))
print(new_list1)
'''
[64,?81,?49,?25,?49,?36,?4,?16,?9]
'''
reduce() 函數
在 Python3 中,reduce() 函數已經被從全局名字空間里移除了,
它現在被放置在 functools 模塊里,
如果想要使用它,則需要通過引入 functools 模塊來調用 reduce() 函數:
fromfunctoolsimportreduce
reduce()函數常用于對一個集合做一些累計操作,表示對iterable中的每個元素和上次調用函數后的結果進行運算。
來看例子
#?求列表之和
fromfunctoolsimportreduce
list?=?[8,9,7,5,7,6,2,4,3]
sum?=?reduce(lambdax,?y:?x+y,?list)
print(sum)#?51?=?8+9+7+5+7+6+2+4+3
fromfunctoolsimportreduce
#?求0-100之和
defadd(x,?y):
returnx+y
sum?=?reduce(add,?range(1,101))
print(sum)
'''
5050
'''
Range()函數
range() 函數用于生成一個新的 range 類型,多用于 for 循環(huán)語句中,用于生成指定范圍的整數。range() 函數的語法格式如下:
range(start,end,step)
range()函數接收的參數必須是整數,
不能是浮點數等其他數據類型,否則會提示類型錯誤。
在使用range()函數時,
如果只有一個參數,那么表示指定的是stop結束整數;
如果是兩個參數,則表示指定的是start開始整數和end結束整數;
只有三個參數都存在時,最后一個參數才表示step步長。
foriinrange(11):
print(f'第{i}個數是:',?i)
'''
第0個數是:?0
第1個數是:?1
第2個數是:?2
第3個數是:?3
第4個數是:?4
第5個數是:?5
第6個數是:?6
第7個數是:?7
第8個數是:?8
第9個數是:?9
第10個數是:?10
'''
將生成的序列轉換成列表
print(list(range(5)))
'''
[0,?1,?2,?3,?4]
'''
print(list(range(5,16)))
'''
[5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15]
'''
print(list(range(0,100,20)))
'''
[0,?20,?40,?60,?80]
'''
reversed ()函數
reversed() 函數用于反轉一個序列對象,將其元素從后向前顛倒構建成一個新的迭代器,reversed() 函數的語法格式如下:
reversed(seq)
反轉的對象可以是序列,如列表、元組、字符串或 range 對象等。
#字符串反轉
str1?='人生短短幾個秋啊'
rev_str?=?list(reversed(str1))
print(str1)
print(''.join(rev_str))
'''
人生短短幾個秋啊
啊秋個幾短短生人
'''
#?列表反轉
list1?=?list(range(5,11))
rev_list?=?list(reversed(list1))
print(list1)
print(rev_list)
'''
[5,?6,?7,?8,?9,?10]
[10,?9,?8,?7,?6,?5]
'''
tuple1?=?tuple(range(1,6))
rev_tup?=?tuple(reversed(tuple1))
print(tuple1)
print(rev_tup)
'''
(1,?2,?3,?4,?5)
(5,?4,?3,?2,?1)
'''
sorted() 函數
sorted() 函數用于對可迭代對象進行?排序,返回一個重新排序的列表,當使用該函數進行排序后,原列表的元素順序不變。語法格式如下:
sorted(iterable,?key=None,?reverse=False):
排序的對象可以是列表、字符串、字典等
grade_list?=?[656,602,610,618,663,695,622,645,677,640]#?10名600分以上的學生成績列表
#?升序列表:?[602,?610,?618,?622,?640,?645,?656,?663,?677,?695]
print(f"升序列表:{sorted(grade_list)}")#?升序排序
#?降序列表:?[695,?677,?663,?656,?645,?640,?622,?618,?610,?602]
print(f"降序列表:{sorted(grade_list,?reverse=True)}")#?降序排序
zip() 函數
zip() 函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的 zip 對象。語法格式如下:
zip(*iterables)?-->?zip?object參數說明:
iterables:可迭代對象,如列表、字典、元組、字符串等,zip() 函數允許多個可迭代對象作為參數。
當 zip() 函數沒有參數時,則返回空的迭代器。
當 zip() 函數只有一個參數時,則從參數中依次取一個元素組成一個元組,再將依次組成的元組組合成一個新的迭代器。
當 zip() 函數有兩個參數時,分別從兩個參數中依次各取出一個元素組成元組,再將依次組成的元組組合成一個新的迭代器。
列表合并生成列表
#?生成列表
name_list?=?["Amo","Paul","Jason","Seven"]
age_list?=?[18,19,20,21]
print(list(zip(name_list,?age_list)))
'''
[('Amo',?18),?('Paul',?19),?('Jason',?20),?('Seven',?21)]
'''
列表合并生成字典
#?生成字典
name_list?=?["Amo","Paul","Jason","Seven"]
age_list?=?[18,19,20,21]
print(dict(zip(name_list,?age_list)))
'''
{'Amo':?18,?'Paul':?19,?'Jason':?20,?'Seven':?21}
'''
矩陣轉換
x?=?[1,2,3]
y?=?[4,5,6]
z?=?[7,8,9]
print(list(zip(x,?y,?z)))
'''
[(1,?4,?7),?(2,?5,?8),?(3,?6,?9)]
'''
本文詳細介紹了幾種事半功倍的python高級函數,
先收藏起來。
有興趣的讀者可以嘗試自己動手練習一下。