Day_11-函數(shù)(三)

一魂那、遞歸函數(shù)

實際開發(fā)時候仓蛆,能不用遞歸就不用

1.什么是遞歸函數(shù)
函數(shù)中調(diào)用函數(shù)本身的函數(shù)就是遞歸函數(shù)

2.遞歸的作用
循環(huán)能做的事情历谍,遞歸函數(shù)都能做

a = 0
def func2():
    global a
    if a < 5:
        print('~~~~~')
        a += 1
        func2()

3.怎么寫遞歸函數(shù): f(n)
步驟:
第一步:確定臨界值
說明:循環(huán)結(jié)束的條件全陨,在臨界值的地方要讓遞歸函數(shù)結(jié)束!
第二步:找關(guān)系 - 找當(dāng)次循環(huán)和上次循環(huán)的關(guān)系
? ? ? 找f(n)和f(n-1)的關(guān)系
第三步:假設(shè)函數(shù)的功能已經(jīng)實現(xiàn)南吮,通過f(n-1)來實現(xiàn)f(n)的功能

def f(n):
    # 1 找臨界值
    if n == 1:
        return 1
    # 2.找關(guān)系
    """
    f(n) = f(n-1) + n
    """
    return f(n-1)+n

print(f(100))

4.循環(huán)能做的事情不能用遞歸做!
原因
遞歸函數(shù):每次調(diào)用函數(shù)本身誊酌,都會在棧區(qū)間開辟一塊空間部凑,并且不會釋放,直到找到臨界點碧浊,嚴(yán)重消耗內(nèi)存
循環(huán):開辟一塊空間涂邀,反復(fù)改變里面的值

二、模塊

1.什么是模塊
在python中一個.py文件就是一個模塊

分類
a.系統(tǒng)模塊(標(biāo)準(zhǔn)庫):系統(tǒng)提供的模塊(安裝解釋器時箱锐,已經(jīng)導(dǎo)入到解釋器中,直接使用即可)
random
作用:提供隨機(jī)數(shù)
math
作用:提供數(shù)學(xué)運算相關(guān)的方法
json庫
作用:提供json相關(guān)操作
re
作用:提供正則表達(dá)式的操作
socket
作用:提供python的套接字編程
time
作用:提供和時間相關(guān)的操作
threading
作用:提供和線程相關(guān)的操作

b.自定義模塊
自己創(chuàng)建的py文件
分類
1.自己寫的模塊
2.別人寫的模塊:第三方庫(需要先下載到解釋器中比勉,然后才能在代碼中導(dǎo)入)

補充:標(biāo)準(zhǔn)庫和第三方庫一般是通過模塊提供變量、函數(shù)驹止、類

2.怎么使用模塊
寫法:import 模塊名(庫名)
作用:直接導(dǎo)入指定的模塊浩聋,導(dǎo)入后可以使用模塊中所有的全局變量
(包含了變量、函數(shù)和類)
使用:模塊名.變量 -> 來使用模塊中的內(nèi)容

寫法:from 模塊名 import 變量1臊恋,變量2
作用:在程序中導(dǎo)入指定的模塊衣洁,導(dǎo)入后只能使用import后面的變量
使用:直接使用變量,無需加’模塊名.‘

寫法:from 模塊名 import *
使用:直接使用變量抖仅,無需加’模塊名.‘

導(dǎo)入模塊的實質(zhì)
a.不管是使用import還是from-import,導(dǎo)入模塊的時候都會執(zhí)行模塊中所有的代碼
b.python中一個模塊不會重復(fù)導(dǎo)入多次坊夫,因為導(dǎo)入時,系統(tǒng)會自動檢查當(dāng)前模塊是否已經(jīng)導(dǎo)入

4.怎么阻止模塊中的內(nèi)容被其他模塊執(zhí)行

如果不希望被其他模塊執(zhí)行的代碼放在if語句中撤卢,
如果希望被其他模塊使用的代碼就放在if語句外面
(這里的if語句指的是:if __name__ == '__main__':)

原理:每個模塊都有一個name屬性环凿,代表模塊名,默認(rèn)情況下它的值是py文件的文件名凸丸,當(dāng)當(dāng)前模塊正在被執(zhí)行(直接執(zhí)行)的時候拷邢,它的屬性__name__的值就會變成__main__

# 1.系統(tǒng)模塊
import random
print(random.randint(1, 199))

# 自定義模塊
import model1
model1.a = 1000
print(model1.a)
print(model1.fun1())

# 不用模塊名.方法就能調(diào)用模塊中的一些變量
from model2 import aa, x  # 不能是強制使用
print('aa:', aa)
print(x)  # 9

# 不用模塊名.方法就能調(diào)用模塊中所有變量
from model2 import *  # *是通配符
print(aa)
print(x)

5.重命名
目的:導(dǎo)入模塊時,可以對模塊或者模塊中的內(nèi)容重新命名
寫法
a.import 模塊名 as 新模塊名
b.from 模塊名 import 變量1 as 新變量1屎慢,變量2 as 新變量2
應(yīng)用:當(dāng)模塊名很長時瞭稼,可以使用此方法

# 修改模塊名
import model4 as newMode
print(model4.age)

# 修改模塊中的內(nèi)容
name = 100
from model4 import name as new_name, age as new_age
print(name)
print(new_name)
print(new_age)

三、迭代器

1.什么是迭代器(iter)
定義:python中提供的容器型數(shù)據(jù)類型
特點
a.從前往后一個一個的取
b.取出后腻惠,迭代器中不復(fù)存在

2.迭代器的字面量
a.迭代器沒有指定格式的字面量
b.迭代器元素的產(chǎn)生:
1.通過其他序列轉(zhuǎn)換环肘,
2.通過生成器產(chǎn)生
元素:任意數(shù)據(jù)類型

# 將字符串轉(zhuǎn)換成迭代器,元素就是字符串中的每個字符
iter1 = iter('hello')
print(iter1)

# 將列表轉(zhuǎn)換成迭代器集灌,元素就是列表中的每個元素
iter2 = iter([100, 'dfd', (10, 39), [1, 2], {'a': 10, 'b': 20}, lambda x: x])
print(iter2)

3.獲取元素
元素特點:只支持悔雹,不支持增刪改
獲取方式
1.next函數(shù)
寫法:next(迭代器名)
目的:獲取迭代器中最新(最頂層)的數(shù)據(jù)
2.for 變量 in 迭代器
作用:遍歷獲取每一個元素

# next
iter3 = iter('hello')
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
# print(next(iter3))  # 報錯 StopIteration 因為迭代器中的數(shù)據(jù)已經(jīng)取完

# 通過for - in 取迭代器中的元素和next效果一樣复哆,元素還是會被取出
iter3 = iter('123456')
print(next(iter3))
for x in iter3:
    print('x': x)

注意:迭代器元素取完,迭代器不會消失

四腌零、生成器

1.什么是生成器
生成器就是迭代器梯找,迭代器不一定是生成器

2.生成器怎么產(chǎn)生元素
如何產(chǎn)生:調(diào)用一個帶有yield的關(guān)鍵字的函數(shù),就能得到一個生成器

不帶yield函數(shù):調(diào)用時會執(zhí)行函數(shù)體益涧,并且獲取返回值
帶有yield函數(shù):調(diào)用時不會執(zhí)行函數(shù)體锈锤,也不會獲取返回值,而是產(chǎn)生一個生成器(函數(shù)調(diào)用表達(dá)式就是一個生成器)
這個生成器的元素就是yield關(guān)鍵字后面的值

def func1():
    print('===')
    return 100

print(func1())  # 100

def func2():
    print('===')
    return 100
    yield


print(func2())  # <generator object func2 at 0x006F7ED0>

3.獲取生成器中的元素
使用
1.next()
2.for 變量 in 生成器

重點O醒>妹狻!

原理
第一步:執(zhí)行生成器對應(yīng)的函數(shù)
第二步:每次都是執(zhí)行到y(tǒng)ield語句為止扭弧,并且會將yield后面的值作為當(dāng)次獲取到的元素
第三步:下次獲取元素會接著上次結(jié)束的位置阎姥,接著執(zhí)行,直到下一個yield為止
第四步:以此類推鸽捻,直到函數(shù)結(jié)束呼巴,如果執(zhí)行函數(shù)結(jié)束沒有遇到y(tǒng)ield,那么就會報"stopxxxx"異常

一個yield是獲取一個元素
幾個yield就是獲取幾個元素

len(迭代器)無效泊愧,因為元素都是臨時取用

print('=================')
def func3():
    print('~~~~~')
    yield 100


gen1 = func3()  # gen1就是一個生成器
# next()

print(gen1)
print('打印', next(gen1))
# 練習(xí):給每個學(xué)生一個學(xué)號伊磺,并且不會重復(fù)
def creat_num():
    num = 1
    while True:
        yield 'py1809%d' % num
        num += 1

num_gen = creat_num()
for _ in range(10):
    print(next(num_gen))

print('新來的學(xué)生')
print(next(num_gen))

實現(xiàn)一個屬于自己的迭代器方法

def pu_iter(seq):
    for x in seq:
        yield x

iter1 = pu_iter('abc')
print(next(iter1))  # a
print(next(iter1))  # b
print(next(iter1))  # c
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市删咱,隨后出現(xiàn)的幾起案子屑埋,更是在濱河造成了極大的恐慌,老刑警劉巖痰滋,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摘能,死亡現(xiàn)場離奇詭異,居然都是意外死亡敲街,警方通過查閱死者的電腦和手機(jī)团搞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來多艇,“玉大人逻恐,你說我怎么就攤上這事【颍” “怎么了复隆?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姆涩。 經(jīng)常有香客問我挽拂,道長,這世上最難降的妖魔是什么骨饿? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任亏栈,我火速辦了婚禮台腥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绒北。我一直安慰自己黎侈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布镇饮。 她就那樣靜靜地躺著蜓竹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪储藐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天嘶是,我揣著相機(jī)與錄音钙勃,去河邊找鬼。 笑死聂喇,一個胖子當(dāng)著我的面吹牛辖源,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播希太,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼克饶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了誊辉?” 一聲冷哼從身側(cè)響起矾湃,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堕澄,沒想到半個月后邀跃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蛙紫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年拍屑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坑傅。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡僵驰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唁毒,到底是詐尸還是另有隱情蒜茴,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布枉证,位于F島的核電站矮男,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏室谚。R本人自食惡果不足惜毡鉴,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一崔泵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猪瞬,春花似錦憎瘸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痊项,卻和暖如春锅风,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞍泉。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工皱埠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咖驮。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓边器,卻偏偏與公主長得像,于是被迫代替她去往敵國和親托修。 傳聞我的和親對象是個殘疾皇子忘巧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 〇、前言 本文共108張圖睦刃,流量黨請慎重砚嘴! 歷時1個半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細(xì)梳理了一遍眯勾。 ...
    Raxxie閱讀 18,955評論 17 410
  • 本文翻譯自Functional Programming Howto 本文將介紹Python中函數(shù)式編程的特性枣宫。在對...
    大蟒傳奇閱讀 2,615評論 4 14
  • 上午10:17,終于審?fù)旮耐晟辖涣私裉焖械母寮曰贰jP(guān)掉了任務(wù)欄一排的文檔窗口也颤,摘下又是戴了一上午的耳機(jī)。最后一次坐...
    顧迢迢閱讀 129評論 0 0
  • 二郁轻、產(chǎn)品設(shè)計 1 結(jié)構(gòu) 1.1 功能結(jié)構(gòu) >點擊查看原圖 上圖使用思維導(dǎo)圖的方式翅娶,完整展示了美團(tuán)外賣App的功能菜...
    逸宏閱讀 16,420評論 0 27