Python基礎(十二)

来源:https://www.cnblogs.com/tianlangdada/archive/2019/10/01/11616318.html
-Advertisement-
Play Games

此部分介紹推導式、生成器表達式、lambda匿名函數以及部分內置函數,內容很多覺得有幫助的可以收藏~~~ ...


今日主要內容

  • 推導式
  • 生成器表達式
  • lambda匿名函數
  • 內置函數介紹

一、推導式

(一)列表推導式

  • 先來看一段代碼

    • 建立一個空列表,向空列表中添加元素
    lst = list()
    for i in range(5):
      lst.append(i)
    print(lst)
    
    運行結果:
    [0, 1, 2, 3, 4]
    • 利用列表推導式,效果一樣
    lst = [i for i in range(5)]
    print(lst)
    
    運行結果:
    [0, 1, 2, 3, 4]
  1. 迴圈模式:

    • 格式:[元素 for 元素 in 可迭代對象]
    • 執行流程:每次for迴圈將元素添加到列表中
    lst = [i for i in range(5)]
    print(lst)
    
    運行結果:
    [0, 1, 2, 3, 4]
  2. 篩選模式

    篩選模式:

    • 格式:[元素 for 變數 in 可迭代對象 if 條件]
    • 執行流程:執行for迴圈並判斷元素是否符合條件,將符合條件的元素添加到列表中
    lst = [i for i in range(5) if i > 2]
    print(lst)
    
    運行結果:
    [3, 4]

(二)字典推導式

  • 同理,先來看一段代碼

    • 建立一個空字典,向字典中添加鍵值對
    dic = dict()
    for i in range(1, 5):
      dic[f"k{i}"] = i
    print(dic)
    
    運行結果:
    {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
    • 使用字典推導式,效果一樣
    dic = {f"k{i}": i for i in range(1, 5)}
    print(dic)
    
    運行結果:
    {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
  1. 迴圈模式:

    • 格式:{鍵值對 for 元素 in 可迭代對象}
    • 執行流程:執行for迴圈利用元素組成鍵值對添加到字典中
    dic = {f"k{i}": i for i in range(1, 5)}
    print(dic)
    
    運行結果:
    {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
  2. 篩選模式:

    • 格式:{鍵值對 for 元素 in 可迭代對象 if 條件}
    • 執行流程:執行for迴圈並判斷元素是否符合條件,利用符合條件的元素組成鍵值對添加到字典中
    dic = {f"k{i}": i for i in range(1, 5) if i > 2}
    print(dic)
    
    運行結果:
    {'k3': 3, 'k4': 4}

(三)集合推導式

  • 與列表一樣,這裡就不再舉例了
  1. 迴圈模式:

    • 格式:{元素 for 元素 in 可迭代對象}
    • 執行流程:每次for迴圈將元素添加到集合中
    st = {i for i in range(5)}
    print(st)
    
    運行結果:
    {0, 1, 2, 3, 4}
  2. 篩選模式:

    • 格式:{元素 for 變數 in 可迭代對象 if 條件}`
    • 執行流程:執行for迴圈並判斷元素是否符合條件,將符合條件的元素添加到集合中
    lst = {i for i in range(5) if i > 2}
    print(st)
    
    運行結果:
    {3, 4}

(四)推導式應用

  • 來看幾個推導式的應用例題
  1. 求字元串s = "zxdhnbhnb"中"h"的索引

    s = "zxdhnbhnb"
    lst = [i for i in range(len(s)) if s[i] == "h"]
    print(lst)
    
    運行結果:
    [3, 6]
  2. 將下列列表中帶兩個"e"的元素添加到新列表

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    lst = [name for i in names for name in i if name.count("e") == 2]
    print(lst)
    
    運行結果:
    ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

二、生成器表達式

(一)回顧:通過函數實現生成器

  • 回顧一下通過函數實現生成器

    • 將函數return變成yield就變成了生成器
    def func():
      yield 1
      yield 2
      yield 3
    
    g = func()
    print(next(g))
    print(next(g))
    print(next(g))
    
    運行結果:
    1 2 3

(二)生成器表達式

  1. 通過表達式實現生成器

    • 將列表推導式的方括弧[]變成圓括弧(),就成了生成器表達式
    lst = [i for i in range(5)]
    print(type(lst))
    g = (i for i in range(5))
    print(type(g))
    
    運行結果:
    <class 'list'>
    <class 'generator'>
    • 轉換成通過函數實現的生成器(二者等價)
    # g = (i for i in range(5))
    
    def func():    # 二者等價
     for i in range(5):
         yield i
    g= func()
    
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    運行結果:
    0 1 2 3 4
  2. 生成器表達式結構:

    • 普通模式:

      • 格式:(元素 for 元素 in 可迭代對象)
      • 運行機制:惰性機制,不取值不運行,每次取值得到一個結果
      g = (i for i in range(5))
      print(next(g))
      print(next(g))
      print(next(g))
      print(next(g))
      print(next(g))
      
      運行結果:
      0 1 2 3 4 
    • 篩選模式:

      • 格式:(元素 for 元素 in 可迭代對象 if 條件)
      • 運行機制:惰性機制,不取值不運行,每次取值得到一個滿足判斷條件的結果
      g = (i for i in range(5) if i > 2)
      print(next(g))
      print(next(g))
      
      運行結果:
      3 4
  3. 生成器的取值方式補充:

    • 之前提到過的最正宗的next(生成器)
    g = (i for i in range(5))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    運行結果:
    0 1 2 3 4
    • 通過for迴圈取值
    g = (i for i in range(5))
    for el in g:
     print(el)
    
    運行結果:
    0 1 2 3 4
    • 通過list()tuple()set()取值
    g = (i for i in range(5))
    print(list(g))
    print(tuple(g))
    print(set(g))
    
    運行結果:
    [0, 1, 2, 3, 4]
    (0, 1, 2, 3, 4)
    {0, 1, 2, 3, 4}
  4. 真正理解生成器的惰性機制,來看一道例題:

    def add(a, b):
        return a + b
    
    
    def test():
        for r_i in range(4):
            yield r_i
    
    
    g = test()
    
    for n in [2, 10]:
        g = (add(n, i) for i in g)
    print(list(g))
    
    運行結果:
    [20,21,22,23]
    解析:生成器只有在取值的時候才會去運行,上述例題只有最後'print(list(g))'取值。
    
    """
    g = test()
    for n in [2, 10]:
        g = (add(n, i) for i in g)
    """
    
    所以上面的for迴圈可以寫成如下代碼:
    """
    n = 10
    g = (add(n, i) for i in (add(n, i) for i in test()))
    """
    最終代入得到的列表為:[20, 21, 22, 23]

三、lambda匿名函數

(一)匿名函數定義

  1. python中為瞭解決一些簡單的需求可以使用一句話定義一個函數,這就是lambda匿名函數

  2. lambda語法結構:

    • 函數名 = lambda 形參:返回值
    # def func(x, y):  
    #     return x + y
    # print(func(1, 2))
    
    func = lambda x, y: x+y  # 兩個函數等價
    print(func(1, 2))
    
    運行結果:
    3
  3. 註意事項:

    • 形參:可以接受多個所有類型參數(位置、動態位置、預設值、動態關鍵字)
    func = lambda a,b,*args,sex= 'alex',c,**kwargs: kwargs
    print(func(3, 4,c=666,name='zxd'))  
    # 只返回kwargs
    
    運行結果:
    {'name': 'zxd'}
    • 返回值:只能返回一個數據(任意數據類型),必須寫
    func = lambda x:(x[0],x[2])
    print(func('zxdnb'))
    
    運行結果:
    ('z', 'd')
    • 返回值也可以是三元表達式
    func = lambda x,y: x if x > y else y
    print(func(3,100))
    
    運行結果:
    100

(二)結合匿名函數的列表推導式

  • 例一:

    • 列表推導式:
    g = [lambda :i+1 for i in range(3)]
    print([em() for em in g])
    
    運行結果:
    [3, 3, 3]
    • 轉換為普通代碼
    g = list()
    for i in range(3):
      def func():
          return i + 1
      g.append(func)
    
    new_g = list()
    for em in g:
      new_g.append(em())
    print(new_g)
    
    運行結果:
    [3, 3, 3]
  • 例二:

    • 列表推導式:
    g = [lambda i:i+1 for i in range(3)]
    print([em(3) for em in g])
    
    運行結果:
    [4, 4, 4]
    • 轉換為普通代碼
    g = list()
    for i in range(3):
      def func(i):
          return i + 1
      g.append(func)
    
    new_g = list()
    for em in g:
      new_g.append(em(3))
    print(new_g)
    
    運行結果:
    [4, 4, 4]

(三)結合匿名函數的生成器表達式

  • 例一:

    • 生成器表達式:
    g = (lambda i:i+1 for i in range(3))
    print([em(3) for em in g])
    
    運行結果:
    [4, 4, 4]
    • 轉換為函數實現的生成器:
    def g():
        for i in range(3):
            def func(i):
                return i + 1
            yield func
    
    new_g = list()
    for em in g():
        new_g.append(em(3))
    print(new_g)
    
    運行結果:
    [4, 4, 4]
  • 例二:

    • 生成器表達式:
    g = (lambda :i+1 for i in range(3))
    print([em() for em in g])
    
    運行結果:
    [1, 2, 3]
    • 轉換為函數實現的生成器:
    def g():
        for i in range(3):
            def func():
                return i + 1
            yield func
    
    new_g = list()
    for em in g():
        new_g.append(em())
    print(new_g)
    
    運行結果:
    [1, 2, 3]
  • 例三:

    • 生成器表達式
    g = (lambda x:x*i for i in range(3))
    for j in [2,10]:
        g1 = (em(3) for em in g)
    print([e+j for e in g1])
    
    運行結果:
    [10, 13, 16]
    • 轉換為普通代碼
    def g():
        for i in range(3):
            def func(x):
                return x * i
            yield func
    
    for j in [2, 10]:
        def g1():
            for em in g():
                yield em(3)
    
    new_g = list()
    for e in g1():
      new_g.append(e + j)
    print(new_g)
    
    運行結果:
    [10, 13, 16]

四、內置函數

  • 查看解釋器內置常量和內置函數的方法

    • dir(__builtins__)
  • Python3.6.8的內置函數(共72個)

    abs all any ascii bin bool
    bytearray bytes callable chr classmethod compile
    complex copyright credits delattr dict dir
    divmod enumerate eval exec exit filter
    float format frozenset getattr globals hasattr
    hash help hex id input int
    isinstance issubclass iter len license list
    locals map max memoryview min next
    object oct open ord pow print
    property quit range repr reversed round
    set setattr slice sorted staticmethod str
    sum super tuple type vars zip

(一)基礎函數(瞭解)

  • all() any() bytes() callable()
    chr() ord() complex() divmid()
    eval() exec() frozenset() help()
    globals() locals() hash() id()
    iter() next() bin() oct()
    int() hex() pow() repr()
    round() bool()
  1. all()

    • 函數定義:all(*args, **kwargs)
    • 函數說明:填入參數為可迭代對象,如果可迭代對象中每一項元素的布爾值為真,則返回True,若可迭代對象為空,返回True
    print(all([1, 2, 3, 4, 5]))
    print(all([0, 1, 2, 3, 4]))
    print(all([]))
    
    運行結果:
    True
    False
    True
  2. any()

    • 函數定義:any(*args, **kwargs)
    • 函數說明:填入參數為可迭代對象,如果可迭代對象中只要有一項元素的布爾值為真,則返回True,若可迭代對象為空,返回True
    print(any([0, "", 1, False]))
    print(any([0, "", [], False]))
    print(any([]))
    
    運行結果:
    True
    False
    False
  3. bytes()

    • 函數定義:bytes(value=b'', encoding=None, errors='strict')
    • 函數說明:將填入對象轉換為位元組形式,需要指定編碼方式
    print("張旭東".encode("utf-8"))
    print(bytes("張旭東", encoding="utf-8"))
    
    運行結果:
    b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c'
    b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c'
  4. callable()

    • 函數定義:callable(i_e_, some_kind_of_function)
    • 函數說明:判斷對象是否可以調用(類也是可調用的,類的實例可調用__call__()方法)
    def func():
     print("hello world")
    
    print(callable(func))
    
    運行結果:
    True
  5. chr()

    • 函數定義:chr(*args, **kwargs)
    • 函數說明:返回Unicode對應的字元串
    print(chr(65))
    
    運行結果:
    A
  6. ord()

    • 函數定義:ord(*args, **kwargs)
    • 函數說明:返回一個字元串對應的Unicode編碼值
    print(ord("A"))
    
    運行結果:
    65
  7. complex()

    • 函數定義:complex(real, imag=None)
    • 函數說明:返回一個數的複數形式
    print(complex(20))
    
    運行結果:
    (20+0j)
  8. divmid()

    • 函數定義:divmod(x, y)
    • 函數說明:返回元組(x // y, x % y)
    print(divmod(10, 3))
    
    運行結果:
    (3, 1)
  9. eval()(不推薦使用)

    • 函數定義:eval(*args, **kwargs)
    • 函數說明:可以計算給定的參數,參數只能是簡單表達式
    print(eval("5 + 3"))
    
    運行結果:
    8
  10. exec()(不推薦使用)

    • 函數定義:exec(*args, **kwargs)
    • 函數說明:可以計算給定的參數,參數可以是代碼塊
    exec("for i in range(10):print(i)")
    
    運行結果:
    0
    1
    2
    3
    4
  11. frozenset()

    • 函數定義:frozenset(obj)
    • 函數說明:將對象轉換為不可變集合
    print(frozenset((1,2,3)))
    
    運行結果:
    frozenset({1, 2, 3})
  12. help()

    • 函數定義:help(args)
    • 函數說明:查看幫助
    help(list.append)
    
    運行結果:
    Help on method_descriptor:
    
    append(...)
        L.append(object) -> None -- append object to end
  13. globals()

    • 函數定義:globals(*args, **kwargs)
    • 函數說明:返回包含當前作用域的全局變數的字典
    a = 5
    b = 10
    def func():
        print("hello world")
    print(globals())
    
    運行結果:
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000221ED9D69E8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/python_S26/day12/exercise.py', '__cached__': None, 'a': 5, 'b': 10, 'func': <function func at 0x00000221ED8D1EA0>}
  14. locals()

    • 函數定義:locals(*args, **kwargs)
    • 函數說明:返回一個包含當前作用域的局部變數的字典
    a = 5
    def func():
        b = 10
        print(locals())
    
    func()
    
    運行結果:
    {'b': 10}
  15. hash()

    • 函數定義:hash(*args, **kwargs)
    • 函數說明:返回對象的哈希值
    print(hash("zxd"))
    
    運行結果:
    5236597812272808709
  16. id()

    • 函數定義:id(*args, **kwargs)
    • 函數說明:返回對象的id,在CPython中返回的是對象的記憶體地址
    print(id(10))
    
    運行結果:
    1864728976
  17. iter()

    • 函數定義:iter(iterable, sentinel=None)
    • 函數說明:傳入可迭代對象,獲取迭代器
    lst = [1, 2, 3, 4, 5]
    t = iter(lst)
    print(t)
    
    運行結果:
    <list_iterator object at 0x00000181FB2CA9B0>
  18. next()

    • 函數定義:next(iterator, default=None)
    • 函數說明:返回迭代器的下一項,若提供了預設值,並且迭代器已耗盡,則返回它而不是引發StopIteration
    t = iter([1, 2, 3, 4, 5])
    print(next(t, None))
    print(next(t, None))
    print(next(t, None))
    print(next(t, None))
    print(next(t, None))
    print(next(t, None))
    
    運行結果:
    1
    2
    3
    4
    5
    None
  19. bin()

    • 函數定義:bin(*args, **kwargs)
    • 函數說明:返回整數的二進位形式
    print(bin(10))
    
    運行結果:
    0b1010
  20. oct()

    • 函數定義:oct(*args, **kwargs)
    • 函數說明:返回整數的八進位形式
    print(oct(10))
    
    運行結果:
    0o12
  21. int()

    • 函數定義:int(x, base=10)
    • 函數說明:返回對應進位的十進位,需填入對應進位數字元串形式,並填入進位數
    print(int("0b1010", 2))
    print(int("0o12", 8))
    
    運行結果:
    10
    10
  22. hex()

    • 函數定義:hex(*args, **kwargs)
    • 函數說明:返回整數的十六進位形式
    print(hex(20))
    
    運行結果:
    0x14
  23. pow()

    • 函數定義:pow(*args, **kwargs)
    • 函數說明:填入兩個參數時,求x的y次冪;填入三個參數時,求x的y次冪在與z取餘
    print(pow(2, 4))
    print(pow(2, 4, 3))
    
    運行結果:
    16
    1
  24. repr()

    • 函數定義:repr(obj)
    • 函數說明:返回規範字元串的表現形式
    s = "zxd"
    print(repr(s))
    
    運行結果:
    'zxd'
  25. round()

    • 函數定義:round(number, ndigits=None)
    • 函數說明:將數字四捨五入為十進位整數
    print(round(3.5))
    
    運行結果:
    4

(二)常用函數(會用)

  • abs() format() enumerate() open()
    range() print() input() len()
    list() dict() str() set()
    tuple() float() reversed sum()
    dir() type() zip() bool()
  1. abs()

    • 函數定義:abs(*args, **kwargs)
    • 函數說明:返回參數的絕對值
    print(abs(-1))
    
    運行結果:
    1
  2. format()

    • 函數定義:format(*args, **kwargs)
    • 函數說明:返回格式化後的字元串
    s = "你好"
    print(format(s, ">20"))  # 右對齊20位,多餘的部分用空格補齊
    print(format(s, "<20"))  # 左對齊20位,多餘的部分用空格補齊
    print(format(s, "^20"))  # 居中共20位,多餘的部分用空格補齊
    
    運行結果:
                      你好
    你好                  
             你好         
    s = 18
    print(format(s, "08b"))  # 共八位,轉換為二進位
    print(format(s, "08o"))  # 共八位,轉換為八進位
    print(format(s, "08x"))  # 共八位,轉換為十六進位
    print(format(s, "08d"))  # 共八位,轉換為十進位
    
    運行結果:
    00010010
    00000022
    00000012
    00000018
  3. enumerate()

    • 函數定義:enumerate(iterable, start=0)
    • 函數說明:枚舉,遍歷可迭代對象並給定對應遍歷的數字,以元組的形式返回,第二個參數可指定遍曆數字的起始值
    lst = [1, 2, 3, 4, 5]
    for i in enumerate(lst):
        print(i)
    
    運行結果:
    (0, 1)
    (1, 2)
    (2, 3)
    (3, 4)
    (4, 5)
    lst = [1, 2, 3, 4, 5]
    for i in enumerate(lst, 10):  # 指定起始值
        print(i)
    
    運行結果:
    (10, 1)
    (11, 2)
    (12, 3)
    (13, 4)
    (14, 5)
  4. open()

    • 函數定義:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
    • 函數說明:打開一個文件,指定文件路徑file 、文件打開模式mode、文件編碼encoding,返回一個文件句柄用於操作文件,其餘參數暫時忽略
    f = open("text.txt", mode="r", encoding="utf-8")
    f.read()
    f.close()
  5. range()

    • 函數定義:range(start, stop[, step])
    • 函數說明:返回一個對象,該對象可以從開始一個一個返回一個遞增的整數序列一直到結束,如果有步長參數,則按照步長返回
    for i in range(5):
     print(i)
    
    運行結果:
    0
    1
    2
    3
    4
  6. print()

    • 函數定義:print(self, *args, sep=' ', end='\n', file=None)
    • 函數說明:在控制台列印參數,可填入參數sep來替代元素之間的逗號,可填入參數end來控制結尾的換行,可填入參數file將列印的內容寫入文件
    print("zxd", "znb", sep="-", end="!")
    
    運行結果:
    zxd-znb!
  7. input()

    • 函數定義:input(*args, **kwargs)
    • 函數說明:將輸入內容轉換為字元串,可填出參數用來提示用戶
    name = input("請輸入姓名:")
    print(name)
    
    運行結果:
    zxd
  8. len()

    • 函數定義:len(*args, **kwargs)
    • 函數說明:返回容器中的項數
    lst = [1, 2, 3, 4, 5]
    print(len(lst))
    
    運行結果:
    5
  9. list()

    • 函數定義:
      • list()
      • list(iterable)
    • 函數說明:
      • 預設創建空列表
      • 將可迭代對象轉換為列表
    print(list())
    print(list(range(5)))
    
    運行結果:
    []
    [0, 1, 2, 3, 4]
  10. dict()

    • 函數定義:
      • dict()
      • dict(mapping)
      • dict(iterable)
      • dict(**kwargs)
    • 函數說明:
      • 預設創建空字典
      • 可填入映射創建字典
      • 可填入二元組列表創建字典
      • 可填入關鍵字參數常見列表
    print(dict())
    print(dict({"k1": 1, "k2": 2}))
    print(dict([("k1", 1), ("k2", 2)]))
    print(dict(k1=1, k2=2))
    
    運行結果:
    {}
    {'k1': 1, 'k2': 2}
    {'k1': 1, 'k2': 2}
    {'k1': 1, 'k2': 2}
  11. str()

    • 函數定義:

      • str()

      • str(value='', encoding=None, errors='strict')

    • 函數說明:

      • 預設創建空字元串

      • 可將參數轉換為字元串類型,若填入參數為位元組類型,需指定編碼方式

    print(repr(str(123)))
    print(str(b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c',encoding="utf-8"))
    
    運行結果:
    張旭東
    '123'
  12. set()

    • 函數定義:
      • set()
      • set(iterable)
    • 函數說明:
      • 預設創建空集合
      • 將可迭代對象轉換為集合(自動去重)
    print(set())
    print(set([1,2,3,4,5]))
    
    運行結果:
    set()
    {1, 2, 3, 4, 5}
  13. tuple()

    • 函數定義:
      • tuple()
      • tuple(iterable)
    • 函數說明:
      • 預設創建空元組
      • 將可迭代對象轉換為元組
    print(tuple())
    print(tuple([1, 2, 3, 4, 5]))
    
    運行結果:
    ()
    (1, 2, 3, 4, 5)
  14. float()

    • 函數定義:float(x)
    • 函數說明:將參數轉換為浮點型
    print(float(123))
    
    運行結果:
    123.0
  15. reversed

    • 函數定義:reversed(sequence)
    • 函數說明:將傳入的可迭代對象反向迭代,返回一個迭代器
    lst = [1, 2, 3, 4, 5]
    print(reversed(lst))
    print(list(reversed(lst)))
    
    運行結果:
    <list_reverseiterator object at 0x000002043A55A9B0>
    [5, 4, 3, 2, 1]
  16. sum()

    • 函數定義:sum(*args, **kwargs)
    • 函數說明:將填入的參數求和,填入的參數必須是可迭代對象
    print(sum([1, 2, 3, 4, 5]))
    
    運行結果:
    15
  17. dir()

    • 函數定義:dir([object])
    • 函數說明:查看對象的方法
    print(dir(list))
    
    運行結果:
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
  18. type()

    • 函數定義:type(object_or_name, bases, dict)
    • 函數說明:查看對象的類型(其實type()既是函數,又是元類(創造類的類),可以通過type()創建一個類)
    print(type(list()))
    
    運行結果:
    <class 'list'>
  19. zip()

    • 函數定義:zip(iter1 [,iter2 [...]])
    • 函數說明:拉鏈函數,返回一個迭代器,將所有可迭代對象的元素按照位置打包成元組,直到耗盡項數最少的可迭代對象
    lst1 = [1, 2, 3]
    lst2 = [1, 2, 3, 4, 5]
    print(zip(lst1, lst2))
    print(list(zip(lst1, lst2)))
    
    運行結果:
    <zip object at 0x00000204D6E621C8>
    [(1, 1), (2, 2), (3, 3)]
  20. bool()

    • 函數定義:bool(x)
    • 函數說明:將傳入的參數轉換成布爾值,若不填入參數返回False
    print(bool())
    print(bool(123))
    
    運行結果:
    False
    True

(三)高階函數(熟練)

  • 高階函數全部需要結合規則函數,利用lambda匿名函數構造規則函數

  • filter() 篩選過濾
    map() 映射
    sorted() 排序
    max() 求最大值
    min() 求最小值
    reduce() 累計算
  1. filter()

    • 篩選過濾功能
    • 函數定義:filter(function or None, iterable)
    • 函數說明:返回一個迭代器,該迭代器返回滿足規格函數的可迭代對象中的元素,若函數為None,返回可迭代對象中為True的元素
    # 規則函數為None,返回可迭代對象中True的元素
    print(list(filter(None, [0, 1, 2, 3])))
    
    運行結果:
    [1, 2, 3]
    # 返回滿足規則函數可迭代對象中的元素
    print(list(filter(lambda x: x > 1, [0, 1, 2, 3])))
    
    運行結果:
    [2, 3]
  2. map()

    • 映射功能
    • 函數定義:map(func, *iterables)
    • 函數說明:創建一個迭代器,它使用可迭代對象中的每個元素當作參數執行規則函數,直到最短的可迭代對象耗盡為止
    print(list(map(lambda x: x ** 2, [1, 2, 3])))
    
    運行結果:
    [1, 4, 9]
  3. sorted()

    • 排序功能
    • 函數定義:sorted(*args, **kwargs)
    • 函數說明:返回一個列表,按照可迭代對象中的元素升序排列,還可以指定key=規則函數按照規則函數來排序,還可以指定reverse=True來降序排列
    • 與列表中list.sort()的區別:
      • list.sort()改變的是原有列表
      • sorted()建立的新列表
    lst = [4, 2, 3, 7, 1]
    print(sorted(lst))
    print(lst)  # 不改變原來列表
    
    運行結果:
    [1, 2, 3, 4, 7]
    [4, 2, 3, 7, 1]
    dic = {"k1": 3, "k2": 13, "k3": 1}
    print(sorted(dic, key=lambda x: dic[x], reverse=True))
    
    運行結果:
    ['k2', 'k1', 'k3']
  4. max()

    • 返回最大值

    • 函數定義:

      • max(iterable, *[, default=obj, key=func])
      • max(arg1, arg2, *args, *[, key=func])
    • 函數說明:

      • 使用單個可迭代對象,返回其中的最大值,可填入倆個關鍵字參數,當可迭代對象為空的時候返回default的值,可指定規則函數
      lst1 = [1, 2, 3, 4, 5, -6]
      lst2 = []
      print(max(lst1))
      print(max(lst1, key=abs))  # 制定規則參數,返回絕對值最大的元素
      print(max(lst2, default=1)) # 當lst2為空的時候返回1
      
      運行結果:
      5
      -6
      1
      • 使用兩個或更多的參數,返回其中最大的參數
      a = 5
      b = 10
      print(max(a, b))
      
      運行結果:
      10
  5. min()

    • 返回最小值

    • 函數定義:

      • min(iterable, *[, default=obj, key=func])
      • min(arg1, arg2, *args, *[, key=func])
    • 函數說明:

      • 使用單個可迭代對象,返回其中的最小值,可填入倆個關鍵字參數,當可迭代對象為空的時候返回default的值,可指定規則函數
      lst1 = [1, -2, 3, -4, 5, -6]
      lst2 = []
      print(min(lst1))
      print(min(lst1, key=abs))
      print(min(lst2, default=1))
      
      運行結果:
      -6
      1
      1
      • 使用兩個或更多的參數,返回其中最小的參數
      a = 5
      b = 10
      print(min(a, b))
      
      運行結果:
      5
  6. reduce()

    • 累計算
    • 函數定義:reduce(function, sequence, initial=None)
    • 函數說明:按照規則函數將序列從左到右累計算,若有initial參數則作為序列的第一項,併在序列為空時作為預設值
    from functools import reduce
    
    print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5]))
    print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5], 5))
    print(reduce(lambda x, y: x * y, [], 5))
    
    運行結果:
    120
    600
    5

(四)面向對象函數

  • classmethod() delattr() getattr()
    hasattr() issubclass() isinstance()
    object() property() setattr()
    staticmethod() super()
  • 後續補充...

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.硬碟介面 從整體的角度上,硬碟介面分為IDE、SATA、SCSI和SAS四種,IDE介面硬碟多用於家用產品中,也部分應用於伺服器,SCSI介面的硬碟則主要應用於伺服器市場,而SAS只在高端伺服器上,價格昂貴。二.硬碟種類 SATA硬碟:用SATA介面的硬碟又叫串口硬碟,是以後PC機的主流發展方向 ...
  • 1、版本:一般MSSQL2016以下版本使用。 2、適用小資料庫容量的異地備份;如果是資料庫容量較大,產生的日誌比較多;經測試,9G的資料庫大小,鏡像數月個日誌大小達到400G,硬碟開銷太大。 ...
  • `為了自己能更加好的查看自己的總結以及讓關註我的小可愛們能更加好的學習我弄了閱讀模式` 一.直接上代碼 二.補充hover特效 三.效果展示 ...
  • Webstorm作為前端開發的主流工具,對Git及Github可以非常簡便的集成。 1、開發環境:(如何安裝就不說了) ① Webstorm 2018 ② git version 2.20.1 ③ Github註冊用戶 2、Webstorm的工具設置: ① 菜單項File下的Settings,搜索g ...
  • 1.html5的優點: ①對人友好,更加語義化,更直觀,增加了代碼的可讀性。 ②對電腦友好,瀏覽器更容易解析,搜索引擎更容易抓取文檔內容。 ③代碼更加的簡潔。 2.新增的佈局標簽: Article:定義一個獨立內容區塊,一篇文章,一個視頻等; Section:定義一個區域,如文章的章節等; Hea ...
  • 1.基本結構 (1) <!doctype html> doctype 的中文意思是‘’文檔類型‘’ 標記語言的文檔類型,告訴瀏覽器使用什麼樣的文檔類型來解析HTML文檔 (2) <meta charset="utf-8"> <meta>元素用於指定字元串編碼類型直接使用charset屬性指定字元串編 ...
  • 文章首發於公眾號 松花皮蛋的黑板報 作者就職於京東,在穩定性保障、敏捷開發、高級JAVA、微服務架構有深入的理解 最近在我身上發生了這麼一件事。我主要負責內容創作的,提供了一個寫入的邏輯介面,但是在校驗鏈中對圖片來源空間包括功能變數名稱進行了校驗,你可以理解空間是一種業務名位置,空間涉及到精細化成本管理。接 ...
  • 一.安裝 二.簡單使用 1.創建flask對象 二.生成form組件 三.路由 四.頁面渲染 三.相關屬性 1.field欄位 WTForms支持HTML欄位: | 欄位類型 | 說明 | | | | | StringField | 文本欄位, 相當於type類型為text的input標簽 | | ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...