day12 裝飾器和生成器和模組

2021-10-25 02:20:26 字數 2272 閱讀 2871

有參裝飾器的功能

在給函式新增功能的時候可以通過引數控制具體的操作(操作不固定)

怎麼寫有參裝飾器

寫法:def 函式名0(裝飾器引數列表):

def 函式名1(func):

def 函式名2(*args, **kwargs):

result = func(*args, **kwargs):

新功能return result

return 函式名2

return 函式名1

def 函式名(裝飾器的引數列表)

: 無參裝飾器

return 無參裝飾器的函式名

有參裝飾器的用法:

@函式名0(裝飾器實參列表)

什麼是迭代器

迭代器是容器型資料型別(序列)

特點:1.不能同時檢視所有元素(列印看不到裡面的元素)

2.不能統計個數

3.獲取元素的時候只能乙個乙個的取(每次取最上層的那個),每次獲取元素該元素就會從迭代器中消失(取乙個就少乙個)

建立迭代器

迭代器的建立有兩種方式

1.通過iter將其他序列轉換成迭代器

2.建立生成器

獲取元素

不管通過什麼樣的方式獲取到了迭代器中的元素,對應的元素都會從迭代器中消失

1)取單個元素

next(迭代器) - 獲取迭代器最上層的乙個資料(如果迭代器為空,就會報stopiteration錯誤)

2)遍歷

for 變數 in 迭代器:

pass

什麼是生成器(generator)

生成器的本質就是迭代器(迭代器的特點和獲取元素的方式生成器都適用)

建立生成器

呼叫乙個帶有yield關鍵字的函式就可以建立乙個生成器物件(如果被呼叫的函式裡面有yield的,不會執行函式體,也不會獲取函式返回值)

怎麼確定生成中產生的資料

產生資料的個數:看執行完生成器對應的函式的函式體會遇到幾次yield

產生的資料的值:看每次遇到的yield後面的資料是什麼,沒有資料就是none

生成器產生資料的原理

呼叫函式建立生成器物件的時候不會執行函式體,獲取生成器中的元素的時候才會執行

第一次獲取元素會從函式體開始的位置開始執行,執行到第一次yield就停下來,並且將yield後面的資料作為這次獲取到的元素。後面每次獲取元素的時候都是從上次結束的位置接著往後執行,執行到下一次yield停下來。如果從當前位置開始執行到函式結束沒有遇到yield,如果是next就會報stopiteration錯誤。

生成式(生成器的推導式)

將列表推導式的變成()就是生成器的推導式即生成式

什麼是模組

python中乙個py檔案就是乙個模組。

可以在乙個模組中去使用另外乙個模組中的內容(全域性變數),但是需要提前匯入模組

匯入模組

1)import 模組名

a.匯入能夠使用指定模組中所有的全域性變數;

b.以"模組名.變數"形式去使用變數

2)from 模組名 import 變數名1, 變數名2, …

a.匯入指定模組中指定的全域性變數

b.直接使用對應的變數,不需要在前面加"模組名."

3)import 模組名 as 新模組名

匯入模組的時候對模組進行重新命名,重新命名後需要通過新模組名來使用被匯入的模組

4)from 模組名 import 變數名 as 新變數名, …

匯入模組的時候對指定變數進行重新命名

5)from 模組名 import *

匯入模組中所有的全域性變數

匯入模組的原理

不管是通過import還是from-import,在匯入模組的時候,系統會自動將被匯入的模組中所有的**都執行一遍

注意:import匯入模組的時候,自帶查重功能(如果被匯入的模組已經被匯入過,不會重複匯入)

阻止匯入

定義模組的時候,可以通過』if__name__== 「__main__」'這個if語句來阻止模組中的指定**被其他模組在匯入的執行(在這個if語句中的**不會被其他模組執行,不在這個if語句中的**就會被其他模組執行)

原理:每個py檔案中預設都有乙個變數__name__用來儲存當前模組的模組名,

當直接執行某個py檔案的時候這個檔案中的__name__會自動變成"__main__"

day 12 函式生成器

一 1.迭代器 iter next 生成器 本質就是迭代器,兩種方式寫生成器 1 生成器函式 2 生成器表示式 2.生成器函式 函式內部由yield.yield返回 return yield可以把函式分段執行,生成器函式被呼叫的時候,返回生成器。def func yield g func 得到生成器...

day12 生成器和各種推導式

今天主要學習了 1.生成器 2.生成器函式 3.各種推導式 比較詭異,理解了很簡單,不理解很難 4.生成器表示式 重點 一.生成器 def func print 我叫周潤發 return 林志玲 return在函式中表示返回的意思 set func print set 這裡的set 就是建立了乙個生...

day12 作業裝飾器

寫乙個裝飾器 tag要求滿足如下功能 def tag name def test func def new func args,kwargs result func args,kwargs return f return new func return test tag name p defrend...