中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

黃石規(guī)劃建設(shè)局網(wǎng)站一鍵優(yōu)化清理手機(jī)

黃石規(guī)劃建設(shè)局網(wǎng)站,一鍵優(yōu)化清理手機(jī),商務(wù)網(wǎng)站開發(fā)步驟,用vs做網(wǎng)站界面目錄 一、生成器 1、生成器定義 2、生成器存在的意義 3、創(chuàng)建生成器方式一(生成器表達(dá)式) 4. 創(chuàng)建生成器方式二(生成器函數(shù)) 1. 生成器函數(shù) 2. 生成器函數(shù)的工作原理 5. 總結(jié) 1. 什么是生成器 2. 生成器特點(diǎn) 二、迭代器…

目錄

一、生成器

1、生成器定義

2、生成器存在的意義

3、創(chuàng)建生成器方式一(生成器表達(dá)式)

4. 創(chuàng)建生成器方式二(生成器函數(shù))

1. 生成器函數(shù)

2. 生成器函數(shù)的工作原理

5. 總結(jié)

1. 什么是生成器

2. 生成器特點(diǎn)

二、迭代器

1、概念

2、可迭代對(duì)象和迭代器區(qū)別

?3、for循環(huán)本質(zhì)

4、創(chuàng)建一個(gè)迭代器

三、動(dòng)態(tài)添加屬性和方法

1、動(dòng)態(tài)編程語言定義

2、運(yùn)行過程中給對(duì)象添加屬性和方法

3、給類動(dòng)態(tài)添加靜態(tài)方法以及類方法

四、限制動(dòng)態(tài)添加

1、slots

1.? __slots__的作用

2. 對(duì)動(dòng)態(tài)添加成員變量、成員方法有限制

3. 對(duì)動(dòng)態(tài)添加類屬性、類方法沒有限制


一、生成器

1、生成器定義

? ? ? ? 在Python中,一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器:generator

2、生成器存在的意義

? ? ? ? 列表所有數(shù)據(jù)都在內(nèi)存中,如果有海量數(shù)據(jù)的話將會(huì)非常消耗內(nèi)存。

? ? ? ? 例如:僅需要訪問前面幾個(gè)元素,那后邊所有空間就浪費(fèi)了

? ? ? ? 如果列表元素按照某種算法推算出來,就可以在循環(huán)的過程中不斷推算出后續(xù)的元素,這樣就不必創(chuàng)建完整的 list ,從而節(jié)省大量的空間。

3、創(chuàng)建生成器方式一(生成器表達(dá)式)

? ? ? ? 生成器表達(dá)式很簡(jiǎn)單,只要把一個(gè)列表推導(dǎo)式的 [] 改成 () ,就創(chuàng)建了一個(gè)生成器(generator):

L = [x * x for x in range(10)]  #推導(dǎo)式
print(L)
g = (x * x for x in range(10)) #加成括號(hào)就是生成器
print(g)
#<generator object <genexpr> at 0x1022ef630>
'''L是一個(gè)list,而g則是一個(gè) generator'''

4. 創(chuàng)建生成器方式二(生成器函數(shù))

1. 生成器函數(shù)

  • 如果一個(gè)函數(shù)中包含了 yield 關(guān)鍵字,那么這個(gè)函數(shù)就不再是一個(gè)普通的函數(shù),調(diào)用函數(shù)就是創(chuàng)建了一個(gè)生成器(generator)對(duì)象
  • 生成器函數(shù):利用關(guān)鍵字 yield 一次性返回一個(gè)結(jié)果,阻塞,重新開始

2. 生成器函數(shù)的工作原理

  • 生成器函數(shù)返回一個(gè)迭代器,for循環(huán)對(duì)這個(gè)迭代器不斷調(diào)用 __next__() 函數(shù),不斷運(yùn)行到下一個(gè) yield 語句,一次一次取得每一個(gè)返回值,直到?jīng)]有 yield 語句為止,最終引發(fā) StopIteration 異常
  • ?yield 相當(dāng)于 return 返回一個(gè)值,并且記住這個(gè)返回的位置,下次迭代時(shí),代碼從 yield 下一條語句(不是下一行)開始執(zhí)行
  • ?send() next() 一樣,都能讓生成器往下走一步(下次遇到 yield 停),但 send() 能傳一個(gè)值,這個(gè)值作為 yield 表達(dá)式整體的結(jié)果

測(cè)試生成器工作原理(yield)

'''
如果一個(gè)函數(shù)中包含 yield 關(guān)鍵字,那么這個(gè)函數(shù)就不再是一個(gè)普通函數(shù),
調(diào)用函數(shù)就是創(chuàng)建了一個(gè)生成器(generator)對(duì)象生成器函數(shù):其實(shí)就是利用關(guān)鍵字 yield 一次性返回一個(gè)結(jié)果,阻塞,重新開始原理
1. 函數(shù)有了yield之后,調(diào)用它,就會(huì)生成一個(gè)生成器
2. 下次從下一個(gè)語句執(zhí)行,切記不是下一行(tmp = yield i)
3. return在生成器中代表生成器種植,直接報(bào)錯(cuò):StopIeratation
4. next方法作用:喚醒并繼續(xù)執(zhí)行
'''
def test():print("start")i = 0while i<3:'''yield i #第一次執(zhí)行,此處掛起;同時(shí)將i的值返回到i#第二次執(zhí)行,從掛起的地方往下執(zhí)行'''temp = yield i #下次迭代時(shí),代碼從`yield`的下一條語句(不是下一行)開始執(zhí)行print(f"i:{i}")i += 1print("end")return "done"
if __name__ == '__main__':a = test()print(type(a))print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())# 拋出異常:StopIteration
'''
<class 'generator'>
start
0
temp:None
1
temp:None
2
temp:None
end
Traceback (most recent call last):in <module>print(a.__next__())# 拋出異常:StopIteration
StopIteration: done
'''

測(cè)試生成器工作原理(send)

'''
send的作用是喚醒并繼續(xù)執(zhí)行,發(fā)送一個(gè)信息到生成器內(nèi)部
'''
def foo():print("start")i = 0while i < 2:temp = yield iprint(f"temp:{temp}")i += 1print("end")g = foo()
print(next(g))  #等同g.__next__(),next是內(nèi)置函數(shù)
print("*"*20)
print(g.send(100))
print(next(g))
# for a in g:#g所返回的值是yield處的i
#     print(a)
'''
start
0
********************
temp:100
1
temp:None
end
Traceback (most recent call last):print(next(g))
StopIteration
'''

5. 總結(jié)

1. 什么是生成器

? ? ? ? 生成器僅僅保存了一套生成數(shù)值的算法,并且沒有讓這個(gè)算法現(xiàn)在就開始執(zhí)行,而是我什么時(shí)候調(diào)用它,它什么時(shí)候開始計(jì)算一個(gè)新的值,并給你返回

2. 生成器特點(diǎn)

  • ?生成器函數(shù)生成一系列結(jié)果。通過 yield 關(guān)鍵字返回一個(gè)值后,還能從其退出的地方繼續(xù)運(yùn)行,因此可以隨時(shí)產(chǎn)生一系列的值。
  • 生成器和迭代是密切相關(guān)的,迭代器都有一個(gè) __next__() 成員方法,這個(gè)方法要么返回迭代的下一項(xiàng)要么引起異常結(jié)束迭代。
  • 生成器是一個(gè)特殊的程序,可以被用作控制循環(huán)的迭代行為,

二、迭代器

1、概念

  1. 迭代是Python最強(qiáng)大的功能之一,是訪問集合元素的一種方式
  2. 迭代器是一個(gè)可以記住遍歷的位置的對(duì)象
  3. 迭代器對(duì)象從集合的第一個(gè)元素開始訪問,直到所有的元素被訪問完結(jié)束
  4. 迭代器只能往前不會(huì)后退
  5. 迭代器有兩個(gè)基本的方法: iter() netx()?

2、可迭代對(duì)象和迭代器區(qū)別

  1. 一個(gè)實(shí)現(xiàn)了 iter 方法的對(duì)象,稱為 "可迭代對(duì)象 Ieratable"
  2. 一個(gè)實(shí)現(xiàn)了 next 方法并且是可迭代的對(duì)象,稱為"迭代器" Iterator? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 即:實(shí)現(xiàn)了 iter 方法和 next 方法的對(duì)象就是迭代器

?生成器都是 Iterator對(duì)象,但 list 、 dict str 雖然都是 Iterable(可迭代對(duì)象),? ? ? ? ? ? ? 卻不是Iterator(迭代器)

'''
生成器一定是迭代器
可迭代對(duì)象不一定是迭代器,使用iter([])封裝后可轉(zhuǎn)為迭代器
'''
from collections.abc import Iterator
from collections.abc import Iterable
a = isinstance([], Iterator) #list、dict、str雖然是Iterable(可迭代對(duì)象),卻不是Iterator(迭代器)
print(a)
a = isinstance([], Iterable) #可迭代對(duì)象
print(a)
"""
執(zhí)行結(jié)果:
False
True"""
'''list、dict、str 等 Iterable 變成 Iterator,可以使用 iter() 函數(shù):'''
b = isinstance(iter([]), Iterator)
print(b)
b = isinstance(iter('花非人陌'), Iterator)
print(b)"""
執(zhí)行結(jié)果:
True
True
"""

? ? ? ? Python的 Iterator 對(duì)象表示的是一個(gè)數(shù)據(jù)流??梢园堰@個(gè)數(shù)據(jù)看做是一個(gè)有序序列,但我們卻不能提前知道序列的長(zhǎng)度,只能不斷通過 next() 函數(shù)實(shí)現(xiàn)按需計(jì)算下一個(gè)數(shù)據(jù),所以 Iterator 的計(jì)算是惰性的,只有在需要返回下一個(gè)數(shù)據(jù)時(shí)它才會(huì)計(jì)算。

? ? ? ? 所以,生成器一定是迭代器

?3、for循環(huán)本質(zhì)

#Python3 的 for 循環(huán)本質(zhì)就是通過不斷調(diào)用 next() 函數(shù)實(shí)現(xiàn)的。for x in [1,2,3,4,5]:pass'''本質(zhì)是:'''
#首先獲得Iterator對(duì)象:
it = iter([1,2,3,4,5])
#循環(huán)
while True:try:# 獲得下一個(gè)值:x = next(it)except StopIteration:# 遇到StopIteration 就退出循環(huán)break

4、創(chuàng)建一個(gè)迭代器

一個(gè)類作為一個(gè)迭代器使用需要在類中實(shí)現(xiàn)兩個(gè)方法 __iter__() __next__()

  1. ?__iter__() 方法返回一個(gè)特殊的迭代器對(duì)象,這個(gè)迭代器對(duì)象實(shí)現(xiàn)了 __next__() 方法并通過StopIteration 異常標(biāo)識(shí)迭代的完成
  2. ?__next__() 方法會(huì)返回下一個(gè)迭代器對(duì)象
#創(chuàng)建一個(gè)依次返回10,20,30,...這樣數(shù)字的迭代器
class MyNumbers:def __iter__(self):self.num = 10return selfdef __next__(self):if self.num < 40:x = self.numself.num += 10return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
"""
執(zhí)行結(jié)果:
10
20
30
Traceback (most recent call last):raise StopIteration
StopIteration
"""
"""
程序解析:
在這段代碼中,MyNumbers 類定義了一個(gè)迭代器。該迭代器的作用是生成一系列數(shù)字,從 10 開始,每次增加 10,直到 40,然后停止。在程序中,通過 iter(myclass) 方法獲取 MyNumbers 類的迭代器對(duì)象 myiter,然后調(diào)用 next(myiter) 方法獲取下一個(gè)數(shù)字。在第一次調(diào)用 next(myiter) 方法時(shí),迭代器會(huì)執(zhí)行 __next__() 方法,返回 self.num 的值 10,然后將 self.num 的值增加 10,變?yōu)?20。在第二次、第三次調(diào)用 next(myiter) 方法時(shí),迭代器會(huì)再次執(zhí)行 __next__() 方法,返回 20 和 30,然后將 self.num 的值分別增加 10,變?yōu)?30 和 40。在第四次調(diào)用 next(myiter) 方法時(shí),迭代器再次執(zhí)行 __next__() 方法,發(fā)現(xiàn) self.num 的值已經(jīng)大于等于 40,于是拋出 StopIteration 異常,表示迭代已經(jīng)結(jié)束。
"""

三、動(dòng)態(tài)添加屬性和方法

1、動(dòng)態(tài)編程語言定義

????????指在運(yùn)行時(shí)可以改變其結(jié)構(gòu)的語言:例如新的函數(shù)、對(duì)象、甚至代碼可以被引進(jìn),

已有的函數(shù)可以被刪除或是其他結(jié)構(gòu)上的變化

2、運(yùn)行過程中給對(duì)象添加屬性和方法

#coding=utf-8
import types
class Person():def __init__(self, name, age):self.name = nameself.age = agep1 = Person("zhangsan", 20)
p2 = Person("lisi", 18)
#動(dòng)態(tài)給對(duì)象添加屬性和方法
p1.score = 100
print(p1.score) #加給p1的只能p1用,對(duì)象的也是一樣#動(dòng)態(tài)給對(duì)象添加方法
def run(self):print(f"{self.name}, running...")
p1.run = types.MethodType(run, p1)
#而types.MethodType(run,p1)則是告訴解釋器,self指的就是p1
p1.run()
"""
執(zhí)行結(jié)果:
100
zhangsan, running...
"""

3、給類動(dòng)態(tài)添加靜態(tài)方法以及類方法

#encoding=utf-8
class Person():__slots__ = {"name", "age"}def __init__(self, name, age):self.name = nameself.age = age@staticmethod
def staticfunc():print("--- static method ---")Person.staticfunc = staticfunc
Person.staticfunc()
Person.score = 1000 #動(dòng)態(tài)給對(duì)象靜態(tài)方法
print(Person.score)@classmethod
def clsfunc(cls):print('--- cls method ---')
Person.clsfunc = clsfunc    #動(dòng)態(tài)增加類方法
Person.clsfunc()

四、限制動(dòng)態(tài)添加

1、slots

1.? __slots__的作用

  1. __slots__ 對(duì)動(dòng)態(tài)添加成員變量、成員方法有限制。對(duì)動(dòng)態(tài)添加類屬性、類方法沒有限制
  2. __slots__ 只對(duì)本類有限制,不限制子類

2. 對(duì)動(dòng)態(tài)添加成員變量、成員方法有限制

'''
MyClass 類使用 __slots__ 屬性限制了實(shí)例對(duì)象的屬性,只允許動(dòng)態(tài)添加 x 屬性。
因此,obj.x = 1 可以成功,但是 obj.y = 2 會(huì)拋出 AttributeError 異常
'''
class MyClass:__slots__ = ['x']obj = MyClass()
obj.x = 1  # 可以動(dòng)態(tài)添加 x 屬性
obj.y = 2  # 報(bào)錯(cuò),__slots__ 限制了不能動(dòng)態(tài)添加 y 屬性
"""
執(zhí)行結(jié)果:
AttributeError: 'MyClass' object has no attribute 'y'
"""

3. 對(duì)動(dòng)態(tài)添加類屬性、類方法沒有限制

class MyClass:__slots__ = ['x']classattr = 1@classmethoddef myclassmethod(cls):print("class method")MyClass.newclassattr = 2  # 可以動(dòng)態(tài)添加類屬性
print(MyClass.newclassattr)
MyClass.mynewclassmethod = lambda cls: print("new class method")  # 可以動(dòng)態(tài)添加類方法
MyClass.mynewclassmethod(MyClass)   #傳遞類本身作為參數(shù)
obj = MyClass()
obj.x  = 3    # 可以動(dòng)態(tài)添加實(shí)例屬性
print(obj.x)  # 可以動(dòng)態(tài)添加 x 屬性
"""
執(zhí)行結(jié)果:
2
new class method
3
"""
http://www.risenshineclean.com/news/40727.html

相關(guān)文章:

  • 做一個(gè)網(wǎng)上商城網(wǎng)站建設(shè)費(fèi)用多少錢市場(chǎng)調(diào)研分析報(bào)告范文
  • 網(wǎng)站開發(fā)素材包網(wǎng)站的宣傳與推廣
  • 網(wǎng)站建設(shè)后臺(tái)管理怎么進(jìn)入烏魯木齊seo
  • 商城網(wǎng)站模版代碼重慶seo整站優(yōu)化方案范文
  • 開發(fā)動(dòng)態(tài)網(wǎng)站有哪些技術(shù)百度人工客服電話24小時(shí)
  • 網(wǎng)站開發(fā)全包免費(fèi)手機(jī)優(yōu)化大師下載安裝
  • 外貿(mào)品牌網(wǎng)站設(shè)計(jì)公司鼓樓網(wǎng)頁(yè)seo搜索引擎優(yōu)化
  • 網(wǎng)站開發(fā)需求列表2021最火營(yíng)銷方案
  • 怎么可以自己做網(wǎng)站被百度收到網(wǎng)站seo公司哪家好
  • 石家莊網(wǎng)站建設(shè)價(jià)格低廣州今日新聞?lì)^條新聞
  • 表白網(wǎng)站怎樣做有創(chuàng)意品牌推廣活動(dòng)策劃方案
  • 公路建設(shè)管理辦公室網(wǎng)站中國(guó)最好的營(yíng)銷策劃公司
  • 石家莊做網(wǎng)站100個(gè)商業(yè)經(jīng)典案例
  • 網(wǎng)站開發(fā)文檔要求郴州網(wǎng)站seo外包
  • 個(gè)人簡(jiǎn)歷免費(fèi)制作網(wǎng)站肥城市區(qū)seo關(guān)鍵詞排名
  • 怎樣做邪惡網(wǎng)站臨沂百度代理公司有幾個(gè)
  • 公司免費(fèi)網(wǎng)站制作營(yíng)銷型企業(yè)網(wǎng)站的功能
  • 網(wǎng)站域名301是什么意思南寧seo網(wǎng)絡(luò)推廣
  • app介紹網(wǎng)站模板網(wǎng)站如何做seo推廣
  • 蘭州做網(wǎng)站咨詢蘭州做網(wǎng)站公司企業(yè)微信營(yíng)銷系統(tǒng)
  • 專業(yè)蘇州網(wǎng)站建設(shè)合肥百度競(jìng)價(jià)推廣代理公司
  • 做音樂網(wǎng)站需要什么seo培訓(xùn)師
  • 建設(shè)銀行集團(tuán)網(wǎng)站首頁(yè)百度seo刷排名網(wǎng)址
  • 網(wǎng)站設(shè)計(jì)師需要學(xué)什么谷歌瀏覽器怎么下載
  • 美做天然居家居網(wǎng)站百度app下載并安裝最新版
  • 政府門戶網(wǎng)站建設(shè)百度廣告銷售
  • 郴州網(wǎng)站建設(shè)公司簡(jiǎn)介網(wǎng)址百度刷排名
  • 織夢(mèng)個(gè)人網(wǎng)站模版網(wǎng)絡(luò)營(yíng)銷的效果是什么
  • 微商城設(shè)計(jì)網(wǎng)站建設(shè)沈陽(yáng)專業(yè)seo排名優(yōu)化公司
  • 平臺(tái)門戶網(wǎng)站建設(shè)站外推廣渠道有哪些