2019-01-07遞歸空幻、模塊烁峭、迭代器和生成器

一遞歸函數(shù)

1.什么是遞歸函數(shù)
函數(shù)中調(diào)用函數(shù)本身的函數(shù)就是遞歸函數(shù)
2.遞歸的作用:循環(huán)能做的事情遞歸都能做
3.怎么寫遞歸函數(shù)
第一步:確定臨界值 - 循環(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)實(shí)現(xiàn)约郁,通過f(n-1)來實(shí)現(xiàn)f(n)的功能
例如:求斐波拉切數(shù)列第n個(gè)數(shù)
1,1,2,3,5,8......

def sequence(n):
    # 1.找臨界值
    if n==1 or n==2:
        return 1
    # 2.f(n)和f(n-1)
    return sequence(n-1)+sequence(n-2)
print(sequence(20))

二.什么是模塊

1.在python中一個(gè)py文件時(shí)就是一個(gè)模塊

a.系統(tǒng)模塊 - 程序員自己創(chuàng)建的py文件(安裝解析器的時(shí)候已經(jīng)導(dǎo)入到解析器中了,使用的時(shí)候在代碼中直接導(dǎo)入)
random模塊 - python系統(tǒng)提供的模塊
json庫 - 提供json 數(shù)據(jù)相關(guān)操作
re模塊 - 提供正則表達(dá)式的相關(guān)操作
socket模塊 - 提供python套接字編程
threading模塊 - 提供和線程相關(guān)的操作
b.自定義模塊
自己寫的模塊:
別人寫的模塊 - 第三方庫(需要下載到解釋器中但两,然后才能在代碼中導(dǎo)入)
標(biāo)準(zhǔn)庫和第三方庫一般是通過模塊提供變量鬓梅、函數(shù)、類

2.怎么使用模塊

import 模塊名 -直接導(dǎo)入指定的模塊谨湘,可以使用模塊中所有的全局變量(包含了函數(shù)绽快、變量芥丧、類)導(dǎo)入后通過'模塊名.變量'來使用模塊中的內(nèi)容
from 模塊名 變量1,變量2 -導(dǎo)入指定的模塊坊罢,只能使用import后邊的變量续担,不用加'模塊名.'

from 模塊名 import* --在程序中導(dǎo)入指定的模塊,并且可以使用里面的所有的全局變量

3.導(dǎo)入模塊的實(shí)質(zhì)

a.不管是使用import還是from-import活孩,導(dǎo)入模塊的時(shí)候都會(huì)執(zhí)行模塊中所有代碼
b.重復(fù)導(dǎo)入模塊只會(huì)執(zhí)行一次物遇,導(dǎo)入模塊是系統(tǒng)會(huì)自動(dòng)檢查是否已導(dǎo)入

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

將不希望被其他模塊執(zhí)行的代碼放在if name == 'main':語句中
如果
原理:
每個(gè)模塊都有一個(gè)name屬性憾儒,代表模塊名。默認(rèn)情況下值是py文件的文件名
當(dāng)當(dāng)前模塊正在被執(zhí)行(直接執(zhí)行)的時(shí)候诗舰,模塊屬性name就會(huì)變成main

5.重命名 - 導(dǎo)入模塊的時(shí)候可以對(duì)模塊或者模塊中的內(nèi)容重新命名

import 模塊名 as 新模塊名
from 模塊名 import 變量

6.1

什么是迭代器(iter)
是python提供的容器型數(shù)據(jù)類型阳掐。
獲取迭代器中的元素的時(shí)候只能從前往后一個(gè)一個(gè)的取冷蚂,而且取了這個(gè)之后這個(gè)元素在迭代器中就不存在了

2.迭代器的字面量

迭代器沒有指定格式的字面量蝙茶。迭代器作為容器,只能通過轉(zhuǎn)換其他的序列轉(zhuǎn)換钳恕,或者通過生成器生成
迭代器里面的元素可以是任何類型的數(shù)據(jù).

list1=[1,3,4,5,56,]
print(list1[0])
print(list1[1])

將字符串轉(zhuǎn)換成迭代器蹄衷,迭代器中的元素就是字符串中的每一個(gè)字符

iter1=iter('hello')
print(iter1)
iter2= iter([100,'sss',(10,20)],'xiaohua',True,lambda x:x)
print(iter2)

3.獲取元素

(迭代器中的元素只支持查,不支持增刪改睦番。)
迭代器只能通過next函數(shù)獲取單個(gè)元素托嚣,for--in遍歷一個(gè)一個(gè)獲取每一個(gè)元素
不管怎樣的方式獲取厚骗,已經(jīng)獲取的元素在迭代器中不存在

iter3=iter('hello')
print()
# 1.next
next(迭代器)   - >獲取迭代器中最新的數(shù)據(jù)(最頂層)
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))

通過for in 取迭代器中的元素和next效果一樣,元素還是會(huì)從迭代器中取出

for x in iter3:
    print('x',x)

7.1什么是生成器

生成器就是迭代器夫嗓,迭代器不一定是生成器。

2.生成器怎么產(chǎn)生元素

調(diào)用一個(gè)帶有yield關(guān)鍵字的函數(shù)就能得到生成器
不帶yield的函數(shù):調(diào)用的時(shí)候會(huì)執(zhí)行函數(shù)體煮仇,并獲取返回值
帶有yield的函數(shù):調(diào)用的時(shí)候不會(huì)執(zhí)行函數(shù)體谎仲,也不會(huì)獲取返回值,而是產(chǎn)生一個(gè)生成器(函數(shù)調(diào)用表達(dá)式就是一個(gè)生成器)
這個(gè)生成器中的元素就是yield關(guān)鍵字后邊的值夹姥。

def func1():
    print('====')
    return 100
print(func1())
def func2():
    print('======')
    return 100
    yield
print(func2())      #<generator object func2 at 0x000000000257A9E8>

3.生成器的元素

生成器中的元素也是通過next或者for-in

生成器獲取元素辙诞,實(shí)質(zhì)是去執(zhí)行生成器對(duì)應(yīng)的函數(shù),每次執(zhí)行到y(tǒng)ield語句為止旦部,并且會(huì)將yield后邊的值作為當(dāng)次獲取道德元素
下次獲取元素的時(shí)候回接著上次結(jié)束的位置往后執(zhí)行较店,直到下一個(gè)yield為止...
以此類推,直到函數(shù)結(jié)束婚度。如果執(zhí)行到函數(shù)結(jié)束沒有yield那就會(huì)報(bào)錯(cuò).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝗茁,一起剝皮案震驚了整個(gè)濱河市寻咒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饭寺,老刑警劉巖熔脂,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霞揉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绊序,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抚官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阶捆,“玉大人,你說我怎么就攤上這事洒试。” “怎么了垒棋?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵叼架,是天一觀的道長。 經(jīng)常有香客問我扮饶,道長垢粮,這世上最難降的妖魔是什么靠粪? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任占键,我火速辦了婚禮,結(jié)果婚禮上君仆,老公的妹妹穿的比我還像新娘牲距。我一直安慰自己,他們只是感情好咖摹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布萤晴。 她就那樣靜靜地躺著吐句,像睡著了一般嗦枢。 火紅的嫁衣襯著肌膚如雪屯断。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天择葡,我揣著相機(jī)與錄音敏储,去河邊找鬼朋鞍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛滥酥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缆蝉,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼刊头,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诸尽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穿肄,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤咸产,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脑溢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔼囊,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年壶谒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膳沽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陨界,死狀恐怖痛阻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俏扩,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布录淡,位于F島的核電站油坝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澈圈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一凤覆、第九天 我趴在偏房一處隱蔽的房頂上張望拆魏。 院中可真熱鬧慈俯,春花似錦、人聲如沸贴膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诫舅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刊懈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工匾浪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卷哩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓梯浪,卻偏偏與公主長得像瓢娜,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虏劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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