嗨金句!朋友檩赢,我是酷頭
歡迎來到學(xué)習(xí)python的寶藏基地~~~
今天給大家介紹python的幾種高級函數(shù),一起來看看吧违寞!
Lambda 函數(shù)
Lambda 函數(shù)是一種比較小的匿名函數(shù)——匿名是指它實際上沒有函數(shù)名贞瞒。
Python 函數(shù)通常使用如下樣式來定義,
deffunction_name():
pass
但對于 lambda 函數(shù)趁曼,我們根本沒為它命名军浆。這是因為 lambda 函數(shù)的功能是執(zhí)行某種簡單的表達式或運算,而無需完全定義函數(shù)挡闰。
lambda 函數(shù)可以使用任意數(shù)量的參數(shù)乒融,但表達式只能有一個。
下面我們來看一下普通函數(shù)和lambda函數(shù)的區(qū)別
普通函數(shù)求圓面積
#?求圓面積
importmath
defcirclearea(r):
result?=?math.pi*r*r
returnresult
r?=10
print('圓面積為:',?circlearea(r))
'''
圓面積為:314.1592653589793
'''
lambda函數(shù)求圓面積
#?求圓面積
importmath
r?=10
result?=lambdar:math.pi*r*r
print('圓面積為:',?result(r))
'''
圓面積為:314.1592653589793
'''
再來看看lambda函數(shù)在列表推導(dǎo)式中的那些使用
指定范圍內(nèi)的數(shù)值列表
importrandom
#?生成10-100之間的隨機列表
list??=?[random.randint(10,100)forxinrange(10)]
print(list)
'''
[83,?95,?16,?43,?66,?24,?11,?92,?38,?85]
'''
根據(jù)列表條件生成指定的列表
#?每月拿出月薪的30%存定期
salary?=?[8000,8100,8200,8500,7800,7988,8888]
save_sal?=?[int(x*0.3)forxinsalary]
print('每月存款數(shù)目:',?save_sal)
'''
每月存款數(shù)目:?[2400, 2430, 2460, 2550, 2340, 2396, 2666]
'''
通過列表篩選生成新的列表
#?找出成績大于等于80的學(xué)生
score?=?[80,81,72,75,98,79,88]
result?=?[xforxinscoreifx?>=80]
print('成績大于等于80的學(xué)生:',?result)
'''
成績大于等于80的學(xué)生:?[80, 81, 98, 88]
'''
看它多么簡單摄悯!我們執(zhí)行了一些簡單的數(shù)學(xué)運算赞季,而無需定義整個函數(shù)。這是 Python 的眾多特征之一奢驯,這些特征使它成為一種干凈申钩、簡單的編程語言。
lambda函數(shù)還可以跟一些內(nèi)置函數(shù)一起使用瘪阁,接下來一起看看吧撒遣!
filter()函數(shù)
filter()?函數(shù)用于通過指定條件過濾序列,過濾掉不符合條件的元素管跺,返回一個迭代器對象义黎,如果要轉(zhuǎn)換為列表,可以使用 list()?來轉(zhuǎn)換豁跑。
該接收兩個參數(shù)廉涕,第一個為函數(shù),第二個為序列贩绕,序列的每個元素作為參數(shù)傳遞給函數(shù)進行判斷火的,
然后返回 True 或 False壶愤,最后將返回 True 的元素放到新列表中淑倾。
語法如下:
filter(function,?iterable)
方法1:求出當(dāng)前列表內(nèi)的所有奇數(shù)
#?取出列表內(nèi)所有奇數(shù)
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:求出當(dāng)前列表內(nèi)的所有偶數(shù)
#?取出列表內(nèi)所有偶數(shù)
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()函數(shù)
和filter()函數(shù)類似,map()?會根據(jù)提供的函數(shù)對指定序列做映射征椒。
第一個參數(shù) function 以參數(shù)序列中的每一個元素調(diào)用 function 函數(shù)娇哆,返回包含每次 function 函數(shù)返回值的新列表。
map() 函數(shù)語法:
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() 函數(shù)
在 Python3 中,reduce() 函數(shù)已經(jīng)被從全局名字空間里移除了碍讨,
它現(xiàn)在被放置在 functools 模塊里治力,
如果想要使用它,則需要通過引入 functools 模塊來調(diào)用 reduce() 函數(shù):
fromfunctoolsimportreduce
reduce()函數(shù)常用于對一個集合做一些累計操作勃黍,表示對iterable中的每個元素和上次調(diào)用函數(shù)后的結(jié)果進行運算宵统。
來看例子
#?求列表之和
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()函數(shù)
range() 函數(shù)用于生成一個新的 range 類型,多用于 for 循環(huán)語句中覆获,用于生成指定范圍的整數(shù)马澈。range() 函數(shù)的語法格式如下:
range(start,end,step)
range()函數(shù)接收的參數(shù)必須是整數(shù),
不能是浮點數(shù)等其他數(shù)據(jù)類型弄息,否則會提示類型錯誤痊班。
在使用range()函數(shù)時,
如果只有一個參數(shù)摹量,那么表示指定的是stop結(jié)束整數(shù)涤伐;
如果是兩個參數(shù),則表示指定的是start開始整數(shù)和end結(jié)束整數(shù)缨称;
只有三個參數(shù)都存在時凝果,最后一個參數(shù)才表示step步長。
foriinrange(11):
print(f'第{i}個數(shù)是:',?i)
'''
第0個數(shù)是:?0
第1個數(shù)是:?1
第2個數(shù)是:?2
第3個數(shù)是:?3
第4個數(shù)是:?4
第5個數(shù)是:?5
第6個數(shù)是:?6
第7個數(shù)是:?7
第8個數(shù)是:?8
第9個數(shù)是:?9
第10個數(shù)是:?10
'''
將生成的序列轉(zhuǎn)換成列表
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 ()函數(shù)
reversed() 函數(shù)用于反轉(zhuǎn)一個序列對象睦尽,將其元素從后向前顛倒構(gòu)建成一個新的迭代器豆村,reversed() 函數(shù)的語法格式如下:
reversed(seq)
反轉(zhuǎn)的對象可以是序列,如列表骂删、元組掌动、字符串或 range 對象等。
#字符串反轉(zhuǎn)
str1?='人生短短幾個秋啊'
rev_str?=?list(reversed(str1))
print(str1)
print(''.join(rev_str))
'''
人生短短幾個秋啊
啊秋個幾短短生人
'''
#?列表反轉(zhuǎn)
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() 函數(shù)
sorted() 函數(shù)用于對可迭代對象進行?排序宁玫,返回一個重新排序的列表粗恢,當(dāng)使用該函數(shù)進行排序后,原列表的元素順序不變欧瘪。語法格式如下:
sorted(iterable,?key=None,?reverse=False):
排序的對象可以是列表眷射、字符串、字典等
grade_list?=?[656,602,610,618,663,695,622,645,677,640]#?10名600分以上的學(xué)生成績列表
#?升序列表:?[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() 函數(shù)
zip() 函數(shù)用于將可迭代的對象作為參數(shù)佛掖,將對象中對應(yīng)的元素打包成一個個元組妖碉,然后返回由這些元組組成的 zip 對象。語法格式如下:
zip(*iterables)?-->?zip?object參數(shù)說明:
iterables:可迭代對象芥被,如列表欧宜、字典、元組拴魄、字符串等冗茸,zip() 函數(shù)允許多個可迭代對象作為參數(shù)席镀。
當(dāng) zip() 函數(shù)沒有參數(shù)時,則返回空的迭代器夏漱。
當(dāng) zip() 函數(shù)只有一個參數(shù)時豪诲,則從參數(shù)中依次取一個元素組成一個元組,再將依次組成的元組組合成一個新的迭代器挂绰。
當(dāng) zip() 函數(shù)有兩個參數(shù)時屎篱,分別從兩個參數(shù)中依次各取出一個元素組成元組,再將依次組成的元組組合成一個新的迭代器葵蒂。
列表合并生成列表
#?生成列表
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}
'''
矩陣轉(zhuǎn)換
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高級函數(shù)芳室,
先收藏起來。
有興趣的讀者可以嘗試自己動手練習(xí)一下刹勃。