欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

10個使用Python必須知道的內(nèi)置函數(shù)

 更新時間:2021年09月15日 10:54:56   作者:劉志軍  
這篇文章小編主要向大家介紹的是10個使用Python必須知道的內(nèi)置函數(shù)reduce()、split()、map()等,更多后置函數(shù)請看下文

1. reduce()

reduce() functools 模塊下面的一個函數(shù),接收兩個參數(shù),一個是函數(shù)對象,一個是可迭代對象(比如list), reduce每次會把迭代對象中的下一個元素作用在函數(shù)上做累積計算,最后得到一個值。

來看個例子你就明白,創(chuàng)建函數(shù) :

# 創(chuàng)建函數(shù)  
def add(a, b):  
    result = a + b  
    print(f"{a} +  = {result}")  
    return result  
from functools import reduce  
result = reduce(add, [1, 2, 3, 4])  
print("結(jié)果:", result) 


輸出:

1 + 2 = 3 
3 + 3 = 6 
6 + 4 = 10 
結(jié)果: 10

執(zhí)行過程:第一次將列表中的前兩個數(shù)取出來作為函數(shù)add的參數(shù),第二次將上一次函數(shù)add的返回值與列表的第3個數(shù)作為參數(shù),依此類推,最后得到一個值。這就是reduce的作用。有點像萬物歸一的感覺。

當(dāng)然,如果只是計算列表中的元素之和,大可不必繞這么大彎子用reduce來處理,直接用 sum 函數(shù)就可以解決。

result = sum([1, 2, 3, 4]) 


如果是計算列表中元素的乘積,python并沒有內(nèi)置的函數(shù)直接計算,這時候我們可以借用reduce來處理

def mul(a, b):  
    return a * b  
result = reduce(mul, [1, 2, 3, 4])  
print("結(jié)果:", result) 


輸出:

結(jié)果: 24

或者使用 lambda 匿名函數(shù)

result = reduce(lambda a, b: a * b, [1, 2, 3, 4]) 


甚至可以直接使用operator模塊下的乘法操作符函數(shù)

from operator import mul  
result = reduce(mul, [1, 2, 3, 4]) 
print("結(jié)果:", result) 


最后你會發(fā)現(xiàn)解法其實很多種,不過我們應(yīng)該記住python之禪里面那句話:

There should be one-- and preferably only one --obvious way to do it.

用最合適的方式去做一件事

2. split()

split 接收一個參數(shù),用于將字符串切割成列表,比如一段英文字符串按照空格切割就可以統(tǒng)計出單詞的個數(shù),

words = "python is the best programming language"  
wordswords = words.split(" ")  
print(words) 


輸出:

['column1', 'column2', 'column3']

3. enumerate()

enumerate 函數(shù)用于迭代列表等可迭代對象,它的使用場景一般出現(xiàn)在你需要獲取列表的下標(biāo)位置時,我們知道直接用for循環(huán)去迭代列表時,是拿不到元素下標(biāo)位置的,而 enumerate 就可以獲取,否則你還得自己去定義一個索引變量。

words = ['python', 'is', 'the', 'best', 'programming', 'language']  
index = 0  
for w in words:  
    print(index, w)  
    index += 1  
0 python  
1 is  
2 the  
3 best  
4 programming  
5 language 


使用 enumerate 函數(shù),處理起來就更優(yōu)雅了

for index, w in enumerate(words):  
    print(index, w)  
0 python  
1 is  
2 the  
3 best  
4 programming  
5 language  

4. map()

map是一個與reduce函數(shù)對應(yīng)的函數(shù),Googlemap/reduce框架的思想其實就是從這兩個函數(shù)借鑒而來的。map函數(shù)用于把一個列表通過函數(shù)處理,映射成一個新的列表。例如給列表的每個元素做平方,將列表元素轉(zhuǎn)換成字符串,得到一個新的列表。

result = map(lambda x: str(x), [1, 2, 3, 4])  
print(list(result))  
result = map(lambda x: x * x, [1, 2, 3, 4]))  
print(list(result)) 


輸出:

['1', '2', '3', '4'] 
[1, 4, 9, 16]

此外,map 函數(shù)還可以接受多個列表參數(shù),使得多個列表合并為一個列表成為可能,例如,將兩個列表相同位置的元素相加得到一個新的列表

def merge(x, y):  
    return x + y  
result = map(merge, [1, 2, 3], [3, 2, 1])  
print(list(result)) 


輸出:

[4, 4, 4]

5. getattr()

getattr() 返回對象屬性對應(yīng)的值,接受兩個參數(shù),第一個是對象,第二個是屬性名,這個函數(shù)通常用戶動態(tài)或者某個對象下面的某些屬性的值,看例子:

class Foo:  
    def __init__(self):  
        self.a = 10  
foo = Foo()  
a = getattr(foo, "a")  
print(a) 


輸出:

10

你可能會問,我直接 foo.a 不就可以獲取a屬性的值了嗎?正常情況是這樣沒錯,如果是你在不知道什么情況下要獲取什么屬性的值時,這時候getattr就可以派上用場了。初學(xué)者可能還體驗不到,當(dāng)你嘗試去寫些框架級的代碼時,你要想起來有這樣的函數(shù)可以使用就行。

6. slice

slice 是一個切片函數(shù),切片操作你可能使用過,通過切片來獲取列表的子集, 例如:

s = [1,2,3,4] 
 
>>> s[1:3]  # 獲取列表s中第1到第3之間的元素組成的子列表 


"1:3" 其就是 就是 slice(1:3) 函數(shù)的縮寫方式,前者就像是語法糖

s = [1, 2, 3, 4]  
print(s[slice(1, 3)]) 


通常實際應(yīng)用過程中,直接用語法糖的寫法就可以,沒必要用slice函數(shù)進(jìn)行切片,但是你至少應(yīng)該知道slice是怎么用的。

7. sorted()

sorted 函數(shù)應(yīng)該日常代碼中,算是一個高頻函數(shù)了,用于將列表等可迭代對象進(jìn)行排序,它不會改變原列表的順序,而是返回一個新的列表。默認(rèn)按照升序排列

nums = [4, 5, 6, 3, 1]  
print(sorted(nums)) 


輸出:

[1, 3, 4, 5, 6]

如果想要降序排列,則需要指定第二個參數(shù):reverse=True

nums = [4, 5, 6, 3, 1]  
print(sorted(nums, reverse=True))  # [6, 5, 4, 3, 1] 


sorted 函數(shù)的強(qiáng)大之處遠(yuǎn)不止如此,因為你還可以自定義排序規(guī)則,比如參與比較是一個自定義的類Student, 我需要按照Student里面的年齡age進(jìn)行排序,這時候我們需要自定義排序因子函數(shù)

def my_sort_key(s):  
    return s.age  
class Student:  
    def __init__(self, age):  
        self.age = age  
    def __str__(self): 
        return f"Student({self.age})"  
s1 = Student(12)  
s2 = Student(2)  
s3 = Student(30)  
new_list = (sorted([s1, s2, s3], key=my_sort_key))  
for i in new_list:  
    print(i) 


輸出:

Student(2) 
Student(12) 
Student(30)

8. format

format 函數(shù)曾經(jīng)字符串格式化最常用的函數(shù),使用也是非常簡單,但自從f字符串出現(xiàn)之后,format 的功能逐漸被取代,但是3.6之前還是可以常見到該函數(shù)的應(yīng)用場景。

s = "{} is first name"  
print(s.format("liu")) 


如果需要占位符比較多搞不清次序的話,可以給每個占位符一個名字,這樣就不拍對不上位置了

s = "{first_name} is first name"  
print(s.format(first_name="liu")) 

9. join()

join 也是比較常用的一個內(nèi)置函數(shù),它可以將列表對象用指定的字符作為元素之間的連接,轉(zhuǎn)換為字符串。

words = ['python', 'is', 'the', 'best', 'programming', 'language']  
print(" ".join(words)) # 用空格連接 python is the best programming language 

10. type

type 我認(rèn)為是python最難理解的一個內(nèi)置函數(shù)了,新手可能以為type就是一個用來查看某個對象的類型是什么,例如:

print(type(10)) # <class 'int'>  
print(type([])) # <class 'list'>  
print(type("s"))#  <class 'str'> 


它的另一個作用是可以用type來創(chuàng)建類,一般情況下,我們都用關(guān)鍵字 class 來定義一個類,而type也可以用來創(chuàng)建類

>>> Person = type("Person", (), {"live":True})  
>>> Person  
<class '__main__.Person'> 


第一個參數(shù) Person是類的名字, 第二個參數(shù)用來指定父類是誰, 第三個參數(shù)是這個類的類屬性有哪些。上面這段代碼等價于:

>>> class Person:  
...     live = True  
...  
>>> Person  
<class '__main__.Person'> 


創(chuàng)建Person這類的type函數(shù)其實是一個叫“元類”的東西。而關(guān)于元類甚至可以話一整篇文章來講解了,好在我在之前的文章中有介紹過,感興趣的可以查看一下之前寫的一篇叫什么是 Python 元類這篇文章。元類在寫一些框架時用的較多,比如你去按sqlalchemy的源碼的時候,你會發(fā)現(xiàn)有大量使用元類的場景。

到此這篇關(guān)于10個使用Python必須知道的內(nèi)置函數(shù)的文章就介紹到這了,更多相關(guān)10個Python的內(nèi)置函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python  ceiling divide 除法向上取整(或小數(shù)向上取整)的實例

    python ceiling divide 除法向上取整(或小數(shù)向上取整)的實例

    今天小編就為大家分享一篇python ceiling divide 除法向上取整 (或小數(shù)向上取整)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 帶你快速上手 Apache APISIX 插件開發(fā)

    Python 帶你快速上手 Apache APISIX 插件開發(fā)

    Apache APISIX Python Runner 來了,社區(qū)中的小伙伴們在開發(fā) Apache APISIX 插件時又多了一種新選擇,本文將用實列向大家介紹,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • 使用numpngw和matplotlib生成png動畫的示例代碼

    使用numpngw和matplotlib生成png動畫的示例代碼

    這篇文章主要介紹了使用numpngw和matplotlib生成png動畫的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python str與repr的區(qū)別

    python str與repr的區(qū)別

    repr() 輸出對 Python比較友好,而str()的輸出對用戶比較友好。雖然如此,很多情況下這三者的輸出仍然都是完全一樣的
    2013-03-03
  • selenium+python實現(xiàn)登陸QQ郵箱并發(fā)送郵件功能

    selenium+python實現(xiàn)登陸QQ郵箱并發(fā)送郵件功能

    這篇文章主要介紹了selenium+python實現(xiàn)登陸QQ郵箱并發(fā)送郵件功能,本文給大家分享完整實例代碼,需要的朋友可以參考下
    2019-12-12
  • Python操作qml對象過程詳解

    Python操作qml對象過程詳解

    這篇文章主要介紹了Python操作qml對象過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python實現(xiàn)盲盒抽獎功能(減庫存)

    python實現(xiàn)盲盒抽獎功能(減庫存)

    本文主要介紹了python實現(xiàn)盲盒抽獎功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 如何基于Python爬取隱秘的角落評論

    如何基于Python爬取隱秘的角落評論

    這篇文章主要介紹了如何基于Python爬取隱秘的角落評論,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 利用Python爬蟲給孩子起個好名字

    利用Python爬蟲給孩子起個好名字

    每個人一生中都會遇到一件事情,在事情出現(xiàn)之前不會關(guān)心,但是事情一旦來臨就發(fā)現(xiàn)它極其重要,并且需要在很短的時間內(nèi)做出重大決定,那就是給自己的新生寶寶起個名字。下面這篇文章主要介紹了如何利用Python爬蟲給孩子起個好名字,需要的朋友可以參考下。
    2017-02-02
  • python中的Pyperclip模塊功能詳解

    python中的Pyperclip模塊功能詳解

    pyperclip模塊中有兩個函數(shù),分別是copy()和paste(),copy()用于向計算機(jī)的剪貼板發(fā)送文本,paste()用于從計算機(jī)剪貼板接收文本,這篇文章主要介紹了python中的Pyperclip模塊,需要的朋友可以參考下
    2023-03-03

最新評論