2019-01-07

Day11

一谤牡、 遞歸

1实柠、 什么是遞歸函數(shù)

在函數(shù)體內(nèi)調(diào)用函數(shù)本身的函數(shù)就是遞歸函數(shù)
實(shí)際開發(fā)的時候婆翔,能不用就不用

2拯杠、 遞歸的作用:循環(huán)能做的事情遞歸函數(shù)都能做

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)實(shí)現(xiàn)阴挣,通過f(n-1)來實(shí)現(xiàn)f(n)的功功能

4、 循環(huán)能做的事情不能用遞歸做



def func1(x):
    print(x)
    if x != 0:
        x -= 3
        func1(x)


func1(3)


def sum_digui(n):
    if n == 1:
        return 1
    return sum_digui(n - 1) + n


print(sum_digui(100))

練習(xí):斐波那契序列第N個數(shù)

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


print(feibo(6))


二纺腊、 模塊

1畔咧、 什么是模塊

在python中一個py文件就是模塊

a. 系統(tǒng)模塊 - python系統(tǒng)提供的模塊

random - 提供隨機(jī)數(shù)
math - 提供數(shù)學(xué)運(yùn)算
json庫 - 提供json數(shù)據(jù)相關(guān)操作
re - 提供正則表達(dá)式相關(guān)操作
socket - 提供python套接字編程
time - 提供和時間相關(guān)的操作
threading - 提供和線程相關(guān)的操作

b. 自定義模塊 - 程序員自己創(chuàng)建的py文件,又叫第三方模塊

自己寫的模塊
別人寫的模塊 - 第三方庫"(需要先下載到解釋器中揖膜,然后才能在代碼中導(dǎo)入)
標(biāo)準(zhǔn)款和第三庫一般是通過模塊提供變量誓沸、函數(shù)、類

2壹粟、 怎么使用模塊

import 模塊名 -- 直接導(dǎo)入指定的模塊拜隧,導(dǎo)入后可以使用模塊中所有的全局變量(包含了變量、函數(shù)趁仙、類)
導(dǎo)入后通過‘模塊名.變量’來使用模塊中的內(nèi)容
from 模塊名 import 變量1,洪添,變量2 …… - 在程序中導(dǎo)入指定的模塊,導(dǎo)入后只能使用import后面的變量
導(dǎo)入后直接使用變量雀费,不用在前面加‘模塊名.’
from 模塊名 import * -- 導(dǎo)入模塊名中所有的變量

3干奢、 導(dǎo)入模塊的實(shí)質(zhì):

a. 不管是使用import還是from-import,導(dǎo)入模塊的時候都會執(zhí)行模塊中的所有代碼
b. python中一個模塊不會重復(fù)導(dǎo)入多次盏袄。因?yàn)閷?dǎo)入的時候系統(tǒng)會自動檢查當(dāng)前模塊是否導(dǎo)入

4忿峻、 怎么組織模塊中的內(nèi)容被其他模塊執(zhí)行

if name ='main': 寫在這個if語句中的代碼不會別的模塊中執(zhí)行
如果希望被其他模塊使用的代碼就放在if語句的外面
原理:每個模塊中都有一個name屬性,代表模塊名辕羽。默認(rèn)情況下它的值是py文件的的文件名
當(dāng)當(dāng)前模塊正在被執(zhí)行(直接執(zhí)行0的時候逛尚,模塊屬性name的值就會變成'main'

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

import 模塊名 as 新模塊名
form 模塊名 import 變量名1 as 新變量名1刁愿,變量名2 绰寞,變量名3 as 新變量名3

import time

print(time.localtime())

if __name__ == '__main__':
    print('123')
import tets1


三、 迭代器

1、 什么是迭代器(iter)

是python提供的容器型數(shù)據(jù)類型克握。
獲取迭代器中的元素的時候蕾管,只能從前往后一個一個的取,而且去了之后這個元素在迭代器中菩暗,在迭代器中就不存在了

2掰曾、 迭代器的字面量

迭代器沒有指定格式的字面量。迭代器作為容器停团,里面的元素只能通過請他序列轉(zhuǎn)換旷坦,或者通過生成器生成。

3佑稠、獲取元素(迭代器中的元素只支持查秒梅,不支持增刪改)

迭代器是通過next函數(shù)獲取單個元素,for-in遍歷一個一個獲取所有元素舌胶。
不管哪種方式獲取捆蜀,已經(jīng)獲取過的元素,在迭代器中就不存在幔嫂。

# 將字符串轉(zhuǎn)換成迭代器辆它,迭代器中的元素就是字符串中的每個字符
iter1 = iter('hello')
print(iter1)
# 將列表轉(zhuǎn)換成迭代器,迭代器中的元素就是列表中的每個字符
iter2 = iter([100,'qw'])
print(iter2)

next(迭代器) -> 獲取迭代器中最新的數(shù)據(jù)

print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
# print(next(iter1))   # 報(bào)“stopIteration”異常履恩,因?yàn)樵谶@兒迭代器中的數(shù)據(jù)已經(jīng)取完了
# 通過for-in取迭代器中的元素和next效果一樣锰茉,元素還是會從迭代器中取出
for x in iter2:
    print(x)

四、 生成器

1切心、 什么是生成器

生成器就是迭代器飒筑,迭代器不一定是生成器

2、 生成器是怎么產(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)鍵字后面的值

3全谤、 生成器中的元素

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

生成器獲取元素肤晓,實(shí)質(zhì)就是去執(zhí)行生成器對應(yīng)的函數(shù),每次執(zhí)行到y(tǒng)ield語句為止啼县,并且會將yield后面值作為當(dāng)次獲取到的元素。
下次獲取元素的時候會接著上次結(jié)束的位置往后執(zhí)行沸久,直到下一個yield季眷,
依次類推,直到函數(shù)調(diào)用結(jié)束卷胯。如果執(zhí)行到函數(shù)結(jié)束沒有遇到y(tǒng)ield那么就會報(bào)‘Stopxxxx’異常

def func1():
    print('====')
    return 100
print(func1())
def func2():
    print('!!!!!')
    yield
    return 100
print(func2())
gen1 = func2()
next(gen1)
# 120101 - 120199
def creat_num():
    num = 1
    while True:
        yield ('1201%d'% num)
        num += 1
num_gen =creat_num()
st = []
for _ in range(10):
    st.append(next(num_gen))
print(st[1])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末子刮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挺峡,更是在濱河造成了極大的恐慌橱赠,老刑警劉巖狭姨,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饼拍,死亡現(xiàn)場離奇詭異师抄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辆布,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門谚殊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫩絮,“玉大人围肥,你說我怎么就攤上這事穆刻。” “怎么了榜轿?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飞傀。 經(jīng)常有香客問我,道長弃鸦,這世上最難降的妖魔是什么唬格? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任西轩,我火速辦了婚禮藕畔,結(jié)果婚禮上注服,老公的妹妹穿的比我還像新娘措近。我一直安慰自己瞭郑,他們只是感情好屈张,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布阁谆。 她就那樣靜靜地躺著场绿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪璧尸。 梳的紋絲不亂的頭發(fā)上爷光,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天瞎颗,我揣著相機(jī)與錄音捌议,去河邊找鬼瓣颅。 笑死宫补,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的健民。 我是一名探鬼主播秉犹,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸳劳!你這毒婦竟也來了也搓?” 一聲冷哼從身側(cè)響起还绘,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抚太,失蹤者是張志新(化名)和其女友劉穎尿贫,沒想到半個月后庆亡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捞稿,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彰亥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年继阻,在試婚紗的時候發(fā)現(xiàn)自己被綠了废酷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈蟆。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡背蟆,死狀恐怖带膀,靈堂內(nèi)的尸體忽然破棺而出垛叨,到底是詐尸還是另有隱情柜某,我是刑警寧澤喂击,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布佩谷,位于F島的核電站谐檀,受9級特大地震影響桐猬,放射性物質(zhì)發(fā)生泄漏溃肪。R本人自食惡果不足惜惫撰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一诞挨、第九天 我趴在偏房一處隱蔽的房頂上張望惶傻。 院中可真熱鬧银室,春花似錦蜈敢、人聲如沸抓狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癌佩。三九已至,卻和暖如春酌畜,著一層夾襖步出監(jiān)牢的瞬間桥胞,已是汗流浹背催烘。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工策精, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丸卷,地道東北人谜嫉。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓蔽挠,卻偏偏與公主長得像象泵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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