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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

Python學習day13-函數進階(1)

閉包函數

閉包函數,從名字理解,閉即是關閉,也就是說把一個函數整個包起來。正規點說就是指函數內部的函數對外部作用域而非全局作用域的引用。

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

  • 用參數的形式

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

    ?

  • 包給函數

    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所以會執行到print(x) 8 ? 9 f() 10 f() 11 ?

    閉包函數的應用

    閉包的意義在哪呢,其返回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域,這使得該函數無論在何處調用的時候,都會優先調用外層包裹的作用域。

    其主要應用領域就在于延遲計算和爬蟲領域,可以簡化代碼量,也會使代碼更加的穩定。

  • 裝飾器

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

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

    需要注意的是,裝飾器本身其實是任意可調用的對象,被裝飾的對象也可以是任意可調用的對象。

    裝飾器的實現必須遵循的兩大原則在于:

    • 不修改被裝飾對象的源代碼
    • 不修改被裝飾對象的調用方式

    裝飾器模板

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

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

    迭代器

    迭代是一個比較常見的概念,迭代,也就是更新換代,一個接著一個改變,但單純的重復并不是迭代。

    可迭代對象

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

    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()

    ?

    迭代器對象

    可迭代對象是有__iter__方法的對象,而迭代器對象則是同時有__iter__和__next__方法的對象。

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

    for循環的原理

    for循環其實就是一種迭代器循環,in后面必須是可迭代的對象,這點在leetcode刷題的時候就可以碰到,但凡是碰到鏈表類型的題目,都是不能放在for循環里的,也不能用len測量其長度,就是因為鏈表類型不可迭代。

    其實for循環的內層原理類似于while然后捕捉錯誤,比如:

    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循環本身到最后也是報錯的StopIteration,只不是內部做了處理,捕捉到報錯直接break了,所以for循環的本質還是while循環。

    ?

    轉載于:https://www.cnblogs.com/Xu-PR/p/11342604.html

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。