2019-03-19

1.函數(shù)調(diào)用過程:

函數(shù)調(diào)用過程又叫壓棧的過程:每次調(diào)用函數(shù)碳却,系統(tǒng)都會(huì)在內(nèi)存的棧區(qū)間自動(dòng)開辟一個(gè)臨時(shí)的內(nèi)存空間队秩,

用來保存在函數(shù)中聲明的局部變量(其中形參是也保存在這個(gè)區(qū)域中的),

當(dāng)函數(shù)調(diào)用結(jié)束昼浦,這個(gè)內(nèi)存區(qū)域會(huì)自動(dòng)銷毀(這個(gè)內(nèi)存中存儲(chǔ)的數(shù)據(jù)也會(huì)銷毀)

2.迭代器(iter)

1) 什么是迭代器

迭代器是python提供的容器型數(shù)據(jù)類型馍资。 (可變,有序的)-- 不關(guān)注

迭代器和之前的列表关噪、字典鸟蟹、集合、元祖等容器不一樣使兔,它只能查看元素建钥,而且看一個(gè)對(duì)于迭代器來說,里面的元素就會(huì)少一個(gè)

迭代器的值:a.將其他的數(shù)據(jù)轉(zhuǎn)換成迭代器 b.生成器

迭代器的元素: 任何類型的數(shù)據(jù)都可以虐沥,可以重復(fù)

iter1 = iter('abc')
print(iter1)

iter2 = iter([12, 34, 'abc', [1, 2], {'a': 10}, (1, 2), {1, 3}, lambda x: x])
print(iter2)

2) 查 - 獲取元素的值

注意: 不管以任何形式獲取了迭代器中某個(gè)元素的值熊经,這個(gè)元素都會(huì)從迭代器中消失

a.獲取單個(gè)元素

next(迭代器)/ 迭代器.next() - 返回容器中最上面的元素

print(next(iter1))
print(next(iter1))
print(next(iter1))

print(next(iter1)) # StopIteration

b.遍歷取出迭代器中的每個(gè)元素

print('=============')
iter3 = iter('abcdef')
next(iter3)
next(iter3)
for item in iter3:
print(item)

print('=============')

print(next(iter3)) # StopIteration

3) 什么時(shí)候使用迭代器:多個(gè)數(shù)據(jù)中,某個(gè)或者某些數(shù)據(jù)使用過了就不需要再保存了欲险,這種數(shù)據(jù)就可以使用迭代器來保存镐依。

1.什么是生成器

生成器就是迭代器, 但是迭代器不一定是生成器

1)怎么創(chuàng)建生成器

如果函數(shù)中有yield關(guān)鍵字天试,那么這個(gè)函數(shù)就不再是一個(gè)普通的函數(shù)槐壳。

調(diào)用函數(shù)不再是執(zhí)行函數(shù)體,獲取返回值喜每。而是創(chuàng)建這個(gè)函數(shù)對(duì)應(yīng)的生成器對(duì)象

def nums():
print('============')
print(100)
if False:
yield
return 100

gen1 = nums() # 函數(shù)調(diào)用表達(dá)式nums()才是生成器

2)生成器怎么產(chǎn)生數(shù)據(jù)

一個(gè)生成器能夠產(chǎn)生多少個(gè)數(shù)據(jù)务唐,就看執(zhí)行完生成器對(duì)應(yīng)的函數(shù)體會(huì)遇到幾次yield關(guān)鍵字

生成器是在獲取數(shù)據(jù)的時(shí)候才會(huì)產(chǎn)生數(shù)據(jù),執(zhí)行生成器對(duì)應(yīng)的函數(shù)的函數(shù)體灼卢,直到遇到y(tǒng)ield為止绍哎,

將yield后面的數(shù)據(jù)作為生成器的元素返回来农,并且會(huì)記錄這次產(chǎn)生數(shù)據(jù)函數(shù)體結(jié)束的位置鞋真,下次再產(chǎn)生

數(shù)據(jù)的時(shí)候,會(huì)接著上次結(jié)束的位置接著往后執(zhí)行...如果從執(zhí)行開始到函數(shù)結(jié)束沃于,沒有遇到y(tǒng)ield涩咖,那么就不會(huì)產(chǎn)生數(shù)據(jù)海诲。

def nums():
print('++++++')
yield 'abc'
print('-------')
yield 100
print('********')
for x in range(5):
yield x

創(chuàng)建一個(gè)生成器gen2

gen2 = nums()
print('取第一個(gè)值')
print(next(gen2))
print('取第二個(gè)值')
print(next(gen2))
print('取第三個(gè)值')
print(next(gen2))

def nums2():
index = 0
while True:
yield index
index += 2

gen3 = nums2()
for _ in range(10):
print(next(gen3))

print(next(gen3))
print(next(gen3))

練習(xí): 寫一個(gè)生產(chǎn)器,能夠產(chǎn)生'stuXXXX'的學(xué)號(hào)檩互, stu0000 ~ stu9999

def stu_num_creater(count, width=0):
for num in range(count):
if width == 0:
width = len(str(count))
num_str = 'stu' + str(num).zfill(width)
yield num_str

creater = stu_num_creater(100, 4)
print(next(creater))
for num in creater:
print(num)

1.生成式

生產(chǎn)式是生成器的另外一種寫法(簡(jiǎn)寫)

"""
a.語(yǔ)法1:
生成器變量 = (表達(dá)式 for 變量 in 序列) -- 結(jié)果是生成器
列表變量 = [表達(dá)式 for 變量 in 序列] -- 結(jié)果是列表

b.說明: 表達(dá)式 - 可以是值特幔、變量、運(yùn)算表達(dá)式闸昨、函數(shù)調(diào)用表達(dá)式等蚯斯,只要不是賦值語(yǔ)句都可以

c.展開
def 函數(shù)名():
for 變量 in 序列:
yield 表達(dá)式
"""
gen1 = (x*2 for x in range(5))
print(gen1)
for num in gen1:
print(num)

"""
a.語(yǔ)法2:
生成器變量 = (表達(dá)式 for 變量 in 序列 if 條件語(yǔ)句)

b.展開
def 函數(shù)名():
for 變量 in 序列:
if 條件語(yǔ)句:
yield 表達(dá)式
"""
gen2 = (x for x in range(10) if x % 2)

5個(gè) 1,3饵较,5拍嵌,7,9

for num in gen2:
print(num)

gen2 = ((x, x*2) for x in range(10) if x % 2)
for num in gen2:
print(num)

gen2 = ((x, x*2) for x in range(10) if x % 2)
list2 = list(gen2)
print(list2)

next(gen2)

gen2 = ['num%d' % x for x in range(10) if x % 2]
print(gen2)

python中一個(gè)py文件就是一個(gè)模塊

"""
從封裝的角度看:
函數(shù)是對(duì)功能的封裝
模塊可以通過多個(gè)函數(shù)對(duì)不同的功能進(jìn)行封裝循诉,還可以通過全局變量對(duì)數(shù)據(jù)進(jìn)行封裝
"""

0.模塊的分類: 系統(tǒng)模塊(內(nèi)置模塊)横辆、第三方庫(kù)(別人寫的)、自定義模塊

1.模塊的導(dǎo)入

a.import 模塊名 / import 模塊名 as 新的模塊名 --- 可以通過'模塊名.'的方式去使用這個(gè)模塊中所有的全局變量

b.from 模塊名 import 全局變量1 as 新名1,全局變量2 as 新名2,... --- 帶入指定模塊中指定的全局變量茄猫,導(dǎo)入后直接使用全局變量

注意: 重命名后狈蚤,原名不能使用

===========導(dǎo)入方式1===========

import keyword

import random

import math

import test

print(test.test1_a * 3)

test.test1_a = 200

print(test.test1_a)

test.test1_func1()

============導(dǎo)入方式2==========

from random import randint

print(randint(10, 30))

from test import test1_func1, test1_a

test1_func1()

print(test1_a)

============導(dǎo)入模塊并重命名==========

import test as TS

print(TS.test1_a)

TS.test1_func1()

b = 'python'

from test import b as t_b, test1_a as t_a

print(b, t_b, t_a)

3.導(dǎo)入模塊的原理:當(dāng)代碼執(zhí)行到import或者from - import的時(shí)候,會(huì)自動(dòng)將對(duì)應(yīng)的模塊中的代碼全部執(zhí)行一遍

同一個(gè)模塊導(dǎo)入多次不會(huì)執(zhí)行多次(放心的導(dǎo)入!)

print('++++++++++++++')

import test

import test

from test import test1_a

import test2

print(test1_a, test.test1_func1())

print('++++++++++++++')

print('mudule:', name)
from test2 import yt_sum
print(yt_sum(1, 1))

import PIL
import requests

4.阻止導(dǎo)入: 將需要阻止被別的模塊導(dǎo)入的代碼放到以下if語(yǔ)句中

"""
if name == 'main':
需要阻止導(dǎo)入的代碼段

原理: 每個(gè)模塊都有一個(gè)屬于自己的name屬性划纽,用來保存當(dāng)前模塊的模塊名脆侮。默認(rèn)情況下name的值就模塊對(duì)應(yīng)的py文件
的文件名。當(dāng)我們直接運(yùn)行某個(gè)模塊的時(shí)候勇劣,對(duì)應(yīng)的模塊的name會(huì)自動(dòng)變成'main',其他模塊是默認(rèn)值他嚷。
"""

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芭毙,隨后出現(xiàn)的幾起案子筋蓖,更是在濱河造成了極大的恐慌,老刑警劉巖退敦,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘咖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡侈百,警方通過查閱死者的電腦和手機(jī)瓮下,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钝域,“玉大人讽坏,你說我怎么就攤上這事±ぃ” “怎么了路呜?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我胀葱,道長(zhǎng)漠秋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任抵屿,我火速辦了婚禮庆锦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轧葛。我一直安慰自己搂抒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布尿扯。 她就那樣靜靜地躺著燕耿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姜胖。 梳的紋絲不亂的頭發(fā)上誉帅,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音右莱,去河邊找鬼蚜锨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慢蜓,可吹牛的內(nèi)容都是我干的亚再。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晨抡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼氛悬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耘柱,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤如捅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后调煎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镜遣,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年士袄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悲关。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娄柳,死狀恐怖寓辱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赤拒,我是刑警寧澤秫筏,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布诱鞠,位于F島的核電站,受9級(jí)特大地震影響跳昼,放射性物質(zhì)發(fā)生泄漏般甲。R本人自食惡果不足惜肋乍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一鹅颊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧墓造,春花似錦堪伍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蛉拙,卻和暖如春尸闸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕锄。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工吮廉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸肆。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓宦芦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親轴脐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子调卑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 包(lib)、模塊(module) 在Python中大咱,存在包和模塊兩個(gè)常見概念恬涧。 模塊:編寫Python代碼的py...
    清清子衿木子水心閱讀 3,806評(píng)論 0 27
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,758評(píng)論 0 8
  • 一、總體內(nèi)容 1.1碴巾、協(xié)程的介紹 1.2气破、迭代器以及迭代器的應(yīng)用 1.3、生成器(生成器與迭代器保存的都是生成數(shù)據(jù)...
    IIronMan閱讀 861評(píng)論 0 1
  • xy: 看了麗阿姨發(fā)來的在巴厘島度假的照片餐抢,興奮了我的整個(gè)早晨现使。 海天一色,遼闊高遠(yuǎn)旷痕。 麗阿姨碳锈,是我的同事,你小時(shí)...
    沈園3閱讀 1,082評(píng)論 0 4
  • 三餐 早飯:沒吃(起晚了) 午飯:煮的豆芽欺抗,這次去超市買了2.2元的豆芽(2.5元一斤)售碳,吃了大概一半多點(diǎn) 晚飯:...
    Puredark閱讀 607評(píng)論 0 0