day11總結(jié)

遞歸函數(shù)

1.什么是遞歸?
在函數(shù)中調(diào)用本身的函數(shù)被稱為遞歸函數(shù)

2.遞歸的作用:
循環(huán)可以做的事情遞歸函數(shù)都可以做,

注意:如果循環(huán)可以做,就不要用遞歸
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ù)f的功能已經(jīng)實(shí)現(xiàn),通過f(n-1)來實(shí)現(xiàn)f(n)的功能

def yt_sum(n):
    # 1.找臨界值
    if n == 1:
        return 1

    # 2. 找關(guān)系
    """
    找yt_sum(n)和yt_sum(n-1)的關(guān)系
    yt_sum(n): 1+2+3+...+n-1+n
    yt_sum(n-1): 1+2+3+...n-1
    yt_sum(n) = yt_sum(n-1)+n
    """
    return yt_sum(n-1)+n

"""
yt_sum(4):
n = 4   4==1   return yt_sum(3)+4  ---> return 1+2+3+4
yt_sum(3):
n = 3   3==1   return yt_sum(2)+3  ---> return 1+2+3
yt_sum(2):
n = 2   2==1   return yt_sum(1)+2  ---> return 1+2
yt_sum(1):
n = 1   1==1   return 1
"""
print(yt_sum(4))
print(yt_sum(100))

模塊

1.什么是模塊?
在python中一個(gè)py文件就是一個(gè)模塊
a.系統(tǒng)模塊(標(biāo)準(zhǔn)庫)
系統(tǒng)提供的模塊(安裝解釋器時(shí)已經(jīng)導(dǎo)入到解釋器中,使用的時(shí)候在代碼中直接的導(dǎo)入)
random - 提供隨機(jī)數(shù)
math - 提供數(shù)學(xué)運(yùn)算
json庫 - 提供json相關(guān)操作
re模塊 - 提供正則表達(dá)式相關(guān)操作
socket模塊 - 提供python的套接字編程
time模塊 - 時(shí)間操作
threading - 提供多線程操作
b.自定義模塊(第三方庫)
自己創(chuàng)建的py文件:
別人寫的(第三方庫) - 需要先下載到解釋器中,然后才能在代碼中導(dǎo)入
標(biāo)準(zhǔn)庫和第三方庫一般是通過模塊提供變量和類

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.無論是那種導(dǎo)入模塊的方法,導(dǎo)入模塊的時(shí)候都會(huì)執(zhí)行模塊中所有的代碼
b.python中一個(gè)模塊不會(huì)重復(fù)導(dǎo)入多個(gè)模塊,系統(tǒng)會(huì)自動(dòng)檢測當(dāng)前模塊是否已經(jīng)導(dǎo)入
4.怎么阻止模塊中的內(nèi)容被其他模塊執(zhí)行
將不希望被其他模塊執(zhí)行的代碼放在if語句中
if __ name__ == 'main'
如果希望被其他模塊執(zhí)行的代碼就放在if語句的外面
原理:
每個(gè)模塊都有一個(gè)屬性__ name__屬性,屬性默認(rèn)的值是這個(gè)py文件的文件名
當(dāng)當(dāng)前模塊正在被執(zhí)行(直接執(zhí)行)的時(shí)候,模塊的屬性__ name__的值就會(huì)變成__ main __

import random
print(random.randint(10, 100))

print('=======import model1之前=======')
import model1
import model1
print('=======import model1之后=======')
model1.a = 1000
print(model1.a)
print(model1.fun1())

5.重命名 - 導(dǎo)入模塊的時(shí)候可以對(duì)模塊或者模塊中的內(nèi)容重新命名
import 模塊名 as 新模塊名
from 模塊名 import 變量1 as 新變量1, 變量2 as 新變量2, 變量3
通配符不支持重命名

# import model4 as newMode
# print(newMode.age)

import threading as TD
name = 100

from model4 import name as yt_name, age as yt_age

print(name)
print(yt_name)
print(yt_age)

迭代器

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

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

3.獲取元素
(迭代器中的元素只支持查,不支持增刪改)
迭代器是通過next函數(shù)獲取單個(gè)元素,for-in遍歷一個(gè)一個(gè)獲取每一個(gè)元素。
不管哪種方式獲取,已經(jīng)獲取過的元素,在迭代器中就不存在
1.next
next(迭代器) -> 獲取迭代器中最新的數(shù)據(jù)(最頂層)

iter3 = iter('hello')
print(iter3)
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))

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

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

生成器

1.什么是生成器
生成器就是迭代器, 迭代器不一定是生成器。
2.生成器怎么產(chǎn)生元素
調(diào)用一個(gè)帶有yield關(guān)鍵字的函數(shù)就能得到一個(gè)生成器
不帶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)鍵字后面的值

  1. 生成器的元素
    生成器中的元素也是通過next或者for-in
    生成器獲取元素,實(shí)質(zhì)就是去執(zhí)行生成器對(duì)應(yīng)的函數(shù), 每次執(zhí)行到y(tǒng)ield語句為止,并且會(huì)將yield后面的值作為當(dāng)次獲取到的元素;
    下次獲取元素的時(shí)候會(huì)接著上次結(jié)束的位置往后執(zhí)行,直到下一個(gè)yield為止....
    以此類推,直到函數(shù)結(jié)束。如果執(zhí)行到函數(shù)結(jié)束沒有遇到y(tǒng)ield那么就會(huì)報(bào)'StopXXXXX'異常
print('=================')
def func3():
    print('~~~~')
    yield 'abc', 200
    print('?。。。。。?!')
    yield 100


gen1 = func3()   # gen1就是一個(gè)生成器(生成器就是迭代器)
print(gen1)
re = next(gen1)
print('打印:', re)
print('第一次結(jié)束!')
print(next(gen1))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文件的操作 1.模塊的使用 1.導(dǎo)入模塊Python中一個(gè)py文件就是一個(gè)模塊,可以通過import或者form-...
    hfudhu閱讀 290評(píng)論 0 0
  • 01.recode 1.容器類數(shù)據(jù)類型 a.列表:可變,有序b.元祖:x, y = 12, 100; x, *n...
    Gary134閱讀 271評(píng)論 0 0
  • 1.生成式 格式1: - 結(jié)果是一個(gè)生成器(迭代器)表達(dá)式 for 變量 in 序列--> 展開:def func...
    312d026ea2dd閱讀 175評(píng)論 0 0
  • 2018年伊始,對(duì)于比特幣來說注定不平凡?;蛟S將2018替換成2017、2016都不為過,短短一周左右的時(shí)間比特幣...
    Jayden_xue閱讀 1,051評(píng)論 0 1
  • 朋友在前天突然發(fā)了一張機(jī)票給我,前一秒我還在感嘆哇怎么突然就能坐飛機(jī)去旅游,后一秒,卻是不幸的消息,關(guān)于她的父...
    是我shiWo閱讀 143評(píng)論 0 0

友情鏈接更多精彩內(nèi)容