国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python進(jìn)階編程

這篇具有很好參考價值的文章主要介紹了python進(jìn)階編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

lambda匿名函數(shù)

python使用lambda表達(dá)式來創(chuàng)建匿名函數(shù)

語法

// lambda 參數(shù)們:對參數(shù)的處理
lambda x : 2 * x
// x 是參數(shù), 2*x 是返回值
?
//使用lambda實現(xiàn)求和
sum = lambda arg1, arg2 : agr1 + arg2
print(sum(10,20))
?
// 將匿名函數(shù)封裝在一個函數(shù)里面,可以用同樣的代碼來創(chuàng)建多個匿名函數(shù)
def myfunc(n):
 ? ?return lambda a : a * n
mydoubler myfunc(2)
mytripler myfunc(3)
print(mydoubler(11)) // 2 * 11
print(mytripler(11)) // 3 * 11

lambda函數(shù)不能訪問自己的參數(shù)列表以外或者全局命名空間里面的參數(shù)

lambda的主體是一個表達(dá)式而不是代碼塊,僅僅能封裝有限的邏輯進(jìn)去

推導(dǎo)式

【Python】推導(dǎo)式(列表推導(dǎo)式、元組推導(dǎo)式、字典推導(dǎo)式、集合推導(dǎo)式)詳解_一個寫濕的程序猿的博客-CSDN博客

  • 列表推導(dǎo)式

    [表達(dá)式 for 變量 in 列表]
    或者
    [表達(dá)式 for 變量 in 列表 if 條件]
    [out_exp_res for out_exp in input_list if condition]
    ?
    // 例子
    l = [1,2,3]
    [print(item) for item in l if item > 1]
  • 字典推導(dǎo)式

    {key_expr:value_expr for value in colletion if conditon}
    key_expr:新key生成表達(dá)式,可以是有返回值的函數(shù)
    value_expr:新value生成表達(dá)式,可以是有返回值的函數(shù)
    for value in colletion if conditon:迭代colletion中滿足條件的value傳入到key_expr:value_expr中
  • 集合推導(dǎo)式

    {expression for item in Sequence if condition}
    expression:新元素生成表達(dá)式,可以是有返回值的函數(shù)體
    for item in Sequence if condition:將滿足條件的Sequence迭代傳入expression表達(dá)式
  • 元組表達(dá)式【生成器表達(dá)式】

    元組推導(dǎo)式可以利用range區(qū)間,元組,列表,字典和集合等數(shù)據(jù)類型,快速生成一個滿足指定要求的元組

    (expression for item in Sequence if condition)
    expression:新元素生成表達(dá)式,可以是有返回值的函數(shù)體
    for item in Sequence if condition:將滿足條件的Sequence迭代傳入expression表達(dá)式

enumerate內(nèi)建函數(shù)

enumerate()函數(shù)用于將一個可遍歷的數(shù)據(jù)對象組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)

enumerate(sequence,[start=0])

  • sequence為一個序列,迭代器,或者其它支持迭代對象,返回的是一個enumerate對象

  • 通過enumerate對象的遍歷,可以獲得索引于數(shù)據(jù)的組合對

    list = ['1','2','3','4']
    for index, value in enumerate(list):
     ? ?print(f'第{index},{value}')
    # 結(jié)果如下
    第0,1
    第1,2
    第2,3
    第3,4 ? ?

迭代器與生成器

  • 迭代器是訪問集合元素的一種方式,迭代器特征為:

    1. 是一個可以記住遍歷位置的對象

    2. 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束,迭代器只能往前而不會后退

    3. 迭代器有兩個基本方法:iter()和next(),字符串,列表,元組都可以用于創(chuàng)建迭代器

    4. 迭代器對象可以用for進(jìn)行遍歷,也可以使用next()函數(shù)來獲取下一個值

    list = ['1','2','3','4']
    ?
    my_iterator = iter(list)
    ?
    while True:
     ? ?try:
     ? ? ? ?element = next(my_iterator)
     ? ? ? ?print(element)
     ? ?except StopIteration:
     ? ? ? ?# 迭代結(jié)束,退出循環(huán)
     ? ? ? ?break
  • 生成器:使用了yield的函數(shù)被稱為生成器(generator)

    1. 生成器是一個返回迭代器的函數(shù),只能用于迭代操作,簡單說生成器就是一個迭代器

    2. 在調(diào)用生成器的運行過程中,每次遇到y(tǒng)ield式函數(shù)都會暫停并保存當(dāng)前所有信息,返回yield的值。并在下一次執(zhí)行next()方法時從當(dāng)前位置繼續(xù)運行

    3. 調(diào)用一個生成器函數(shù),返回的是一個迭代器對象

    # 定義一個生成器函數(shù)
    def my_generatpr(n):
     ? ?for i in range(n):
     ? ? ? ?# 使用yield語句返回元素
     ? ? ? ?yield i * i
    ?
    # 創(chuàng)建一個生成器對象并遍歷元素
    for element in my_generatpr(5):
     ? ?print(element)

迭代器和生成器的作用:

  • 節(jié)約內(nèi)存:循環(huán)過程中,數(shù)據(jù)不用一次讀入,迭代器不會保存所有值。而是在運行中動態(tài)的計算出數(shù)列的各個值,并將之前的數(shù)值扔掉

  • 不依賴索引取值

  • 實現(xiàn)惰性計算:需要時再取值計算

  • 精簡代碼:使用yield關(guān)鍵字或者生成器表達(dá)式可以很方便的生成一個迭代器對象

裝飾器

  • 函數(shù)裝飾器:本質(zhì)上是一個python函數(shù),可以讓其它函數(shù)在不需要做任何代碼改動的前提下增加額外功能

  • 提供了@符號作為裝飾器的語法糖

  • 使用語法糖要求裝飾件函數(shù)必須retrurn一個對象

    # 定義一個函數(shù)裝飾器
    def my_decorator(func):
     ? ?def wrapper():
     ? ? ? ?print("Before function call")
     ? ? ? ?func()
     ? ? ? ?print("After function call")
     ? ?return wrapper()
    ?
    # 使用函數(shù)裝飾器
    # 原有功能:打印”hello world“
    @my_decorator
    def say_hello():
     ? ?print("hello world")
    ?
    #調(diào)用函數(shù)
    say_hello()
    ?
    # 結(jié)果
    TypeError: 'NoneType' object is not callable
    Before function call
    hello world
    After function call
  • 類裝飾器

    1. 可以用來改變類的行為,由python類和@符號組成,在python中通常用于實現(xiàn)代碼復(fù)用,日志記錄,性能測試等功能

    ?
    # 定義一個類裝飾器
    class MyClassDecorator:
     ? ?def __init__(self, cls):
     ? ? ? ?self.cls = cls
    ?
     ? ?def __call__(self, *args, **kwargs):
     ? ? ? ?new_args = "Dear " + args[0]
     ? ? ? ?instance = self.cls(new_args, **kwargs)
     ? ? ? ?return instance
    ?
    # 使用類裝飾器
    # 原有功能:打印 hello+名字
    @MyClassDecorator
    class MyClass:
     ? ?def __init__(self, name):
     ? ? ? ?self.name = name
    ?
     ? ?def say_hello(self):
     ? ? ? ?print(f"hello, {self.name}")
    ?
    # 創(chuàng)建實例
    my_object = MyClass("Alice")
    # 調(diào)用實例的方法
    my_object.say_hello()
    ?
    # 打印的結(jié)果hello,DearAlice
  • 需要注意的是,裝飾器本身并不會改變原始代碼的功能,而是通過創(chuàng)建一個新的函數(shù)來實現(xiàn)對原始函數(shù)或者類的修改,因此,在使用裝飾器時,需要確保新創(chuàng)建的函數(shù)或者類與原始代碼有相同的接口或者行為,以免對其它依賴于改代碼的程序產(chǎn)生影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-628036.html

到了這里,關(guān)于python進(jìn)階編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包