日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习day13-函数进阶(1)

發(fā)布時(shí)間:2025/7/14 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习day13-函数进阶(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python學(xué)習(xí)day13-函數(shù)進(jìn)階(1)

閉包函數(shù)

閉包函數(shù),從名字理解,閉即是關(guān)閉,也就是說把一個(gè)函數(shù)整個(gè)包起來。正規(guī)點(diǎn)說就是指函數(shù)內(nèi)部的函數(shù)對(duì)外部作用域而非全局作用域的引用。

為函數(shù)傳參的方式有常用有以下兩種:

  • 用參數(shù)的形式

    xxxxxxxxxx 5 1 def func(x): 2 ? ?print(x) 3 ? ? 4 func(1) 5 ?

    ?

  • 包給函數(shù)

    xxxxxxxxxx 11 1 def outter(x): 2 ? ?x = 1 3 ? ? 4 ? ?def inner(): 5 print(x) 6 ? ?return inner 7 f = outter(1)# outter的返回值為inner所以會(huì)執(zhí)行到print(x) 8 ? 9 f() 10 f() 11 ?

    閉包函數(shù)的應(yīng)用

    閉包的意義在哪呢,其返回的函數(shù)對(duì)象,不僅僅是一個(gè)函數(shù)對(duì)象,在該函數(shù)外還包裹了一層作用域,這使得該函數(shù)無論在何處調(diào)用的時(shí)候,都會(huì)優(yōu)先調(diào)用外層包裹的作用域。

    其主要應(yīng)用領(lǐng)域就在于延遲計(jì)算和爬蟲領(lǐng)域,可以簡(jiǎn)化代碼量,也會(huì)使代碼更加的穩(wěn)定。

  • 裝飾器

    裝飾器是一個(gè)邏輯上比較復(fù)雜的概念,所幸我們并不必追究太深,只需知道其使用方法和大概原理即可。

    所以什么是裝飾器呢,個(gè)人理解裝飾器就是包裹在函數(shù)外面的另外一個(gè)函數(shù),而且裝飾器的起到對(duì)原函數(shù)增加功能的作用,且不影響原函數(shù)的調(diào)用和存在。

    需要注意的是,裝飾器本身其實(shí)是任意可調(diào)用的對(duì)象,被裝飾的對(duì)象也可以是任意可調(diào)用的對(duì)象。

    裝飾器的實(shí)現(xiàn)必須遵循的兩大原則在于:

    • 不修改被裝飾對(duì)象的源代碼
    • 不修改被裝飾對(duì)象的調(diào)用方式

    裝飾器模板

    這里咱們就不舉例那些非常復(fù)雜的裝飾器模型了,只會(huì)越看越暈,我們只需要記住并熟練一個(gè)裝飾器的模板就可以了,萬能模板如下:

    xxxxxxxxxx 1 def deco(func): 2 ? ?def wrapper(*args,**kwargs): 3 ? # 在這里寫需要添加并實(shí)現(xiàn)的功能 4 ? ? ? ?res = fun(*args,**kwargs) 5 ? ? ? ?return res 6 ? ?return wrapper 7 # 調(diào)用方式如下 8 def f1(): 9 print('from f1') 10 ? ? 11 f1 = deco(f1) 12 f1()

    迭代器

    迭代是一個(gè)比較常見的概念,迭代,也就是更新?lián)Q代,一個(gè)接著一個(gè)改變,但單純的重復(fù)并不是迭代。

    可迭代對(duì)象

    Python中一切皆對(duì)象(注意,此對(duì)象非彼對(duì)象)。對(duì)于這一切對(duì)象中,只要是有__iter__方法的對(duì)象,都是可迭代對(duì)象。

    xxxxxxxxxx 1 1 name = 'nick'.__iter__ 2 lis = [1,2].__iter__ 3 tup = (1,2).__iter__ 4 dic = {'name':'nick'}.__iter__ 5 s1 = {'a','b'}.__iter__ 6 f = open('file','r',encoding = 'utf8') 7 f.__iter__ 8 f.close()

    ?

    迭代器對(duì)象

    可迭代對(duì)象是有__iter__方法的對(duì)象,而迭代器對(duì)象則是同時(shí)有__iter__和__next__方法的對(duì)象。

    其實(shí)只有文件本身即是可迭代對(duì)象又是迭代器對(duì)象,別的對(duì)象都需要用__iter__拿到迭代器本身才可以用__next__方法。

    for循環(huán)的原理

    for循環(huán)其實(shí)就是一種迭代器循環(huán),in后面必須是可迭代的對(duì)象,這點(diǎn)在leetcode刷題的時(shí)候就可以碰到,但凡是碰到鏈表類型的題目,都是不能放在for循環(huán)里的,也不能用len測(cè)量其長(zhǎng)度,就是因?yàn)殒湵眍愋筒豢傻?/p>

    其實(shí)for循環(huán)的內(nèi)層原理類似于while然后捕捉錯(cuò)誤,比如:

    xxxxxxxxxx 1 1 lt = [1,2,3] 2 lt_iter = lt.__iter__() 3 while 1: 4 try: 5 print(lt_iter.__next__()) 6 except StopIteration: 7 break 8 # for循環(huán)本身到最后也是報(bào)錯(cuò)的StopIteration,只不是內(nèi)部做了處理,捕捉到報(bào)錯(cuò)直接break了,所以for循環(huán)的本質(zhì)還是while循環(huán)。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/Xu-PR/p/11342604.html

    總結(jié)

    以上是生活随笔為你收集整理的Python学习day13-函数进阶(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。