1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        10個你必須知道的Python內置函數(shù)

        共 6537字,需瀏覽 14分鐘

         ·

        2021-09-18 09:16

        自從把精力投入到次冪數(shù)據(jù)(www.cimidata.com) 這個產品后,貌似很久很久沒有寫過原創(chuàng)文章了,人一旦懶起來也會形成習慣,反之亦然。一個目標之所以難以堅持,很大可能是太大了。


        在我們的一個跑步群里,每周5公里這件事,我們已經堅持了100天。如果歡成每天5公里,我相信你很快會放棄的。而每周5公里,7天內任意一天完成就算達成目標,所以一直堅持著,甚至還能超額完成。



        以后決定堅持一周至少產出一到篇原創(chuàng)出來。來,互相監(jiān)督


        1. reduce()

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

        來看個例子你就明白

        # 創(chuàng)建函數(shù)
        def add(a, b):
            result = a + b
            print(f"{a} +  = {result}")
            return result


        from functools import reduce

        result = reduce(add, [1234])
        print("結果:", result)

        輸出

        1 + 2 = 3
        3 + 3 = 6
        6 + 4 = 10
        結果: 10

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

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

        result = sum([1234])

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

        def mul(a, b):
            return a * b

        result = reduce(mul, [1234])
        print("結果:", result)

        輸出

        結果: 24

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

        result = reduce(lambda a, b: a * b, [1234])

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

        from operator import mul
        result = reduce(mul, [1234])
        print("結果:", result)

        最后你會發(fā)現(xiàn)解法其實很多種,不過我們應該記住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"
        words = words.split(" ")
        print(words)

        輸出

        ['column1''column2''column3']

        3. enumerate()

        enumerate 函數(shù)用于迭代列表等可迭代對象,它的使用場景一般出現(xiàn)在你需要獲取列表的下標位置時,我們知道直接用for循環(huán)去迭代列表時,是拿不到元素下標位置的,而 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ù)對應的函數(shù),Google的map/reduce框架的思想其實就是從這兩個函數(shù)借鑒而來的。map函數(shù)用于把一個列表通過函數(shù)處理,映射成一個新的列表。例如給列表的每個元素做平方,將列表元素轉換成字符串,得到一個新的列表。

        result = map(lambda x: str(x), [1234])
        print(list(result))
        result = map(lambda x: x * x, [1234]))
        print(list(result))

        輸出:

        ['1''2''3''4']
        [14916]

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

        def merge(x, y):
            return x + y


        result = map(merge, [123], [321])
        print(list(result))

        輸出

        [444]

        5. getattr()

        getattr() 返回對象屬性對應的值,接受兩個參數(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就可以派上用場了。初學者可能還體驗不到,當你嘗試去寫些框架級的代碼時,你要想起來有這樣的函數(shù)可以使用就行。

        6. slice

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

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

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

        s = [1234]
        print(s[slice(13)])

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

        7. sorted()

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

        nums = [45631]

        print(sorted(nums))

        輸出

        [13456]

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

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

        sorted 函數(shù)的強大之處遠不止如此,因為你還可以自定義排序規(guī)則,比如參與比較是一個自定義的類Student, 我需要按照Student里面的年齡age進行排序,這時候我們需要自定義排序因子函數(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ù)曾經字符串格式化最常用的函數(shù),使用也是非常簡單,但自從f字符串出現(xiàn)之后,format 的功能逐漸被取代,但是3.6之前還是可以常見到該函數(shù)的應用場景。

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

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

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

        9. join()

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

        words = ['python''is''the''best''programming''language']

        print(" ".join(words)) # 用空格連接 python is the best programming language

        10. type

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

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

        它的另一個作用是可以用type來創(chuàng)建類,一般情況下,我們都用關鍵字 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ù)其實是一個叫“元類”的東西。而關于元類甚至可以話一整篇文章來講解了,好在我在之前的文章中有介紹過,感興趣的可以查看一下之前寫的一篇叫什么是 Python 元類這篇文章。元類在寫一些框架時用的較多,比如你去按sqlalchemy的源碼的時候,你會發(fā)現(xiàn)有大量使用元類的場景。


        推薦閱讀


        牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)

        牛逼!Python的判斷、循環(huán)和各種表達式(長文系列第②篇)

        牛逼!Python函數(shù)和文件操作(長文系列第③篇)

        牛逼!Python錯誤、異常和模塊(長文系列第④篇)


        瀏覽 18
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            五月天久久久久久久 | 国产男女操逼 | 午夜福利久久 | 91亚洲精品久久久久蜜桃 | 美女日逼片 | 男人进女人下面视频 | 久久久久久大香蕉 | 欧美午夜性春猛XXX交 | 黄色小说哪里看 | 成人国产精品秘 欧美高清 |