中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
從函數(shù)到包的Python代碼層次

?

代碼層次

Python是一門腳本語(yǔ)言,新建一個(gè).py文件,寫點(diǎn)代碼,就可以跑起來了,無論放哪都可以。比如where.py文件:

print("Where am I?")

那么問題來了,這是寫在哪里的呢?為了一目了然,我們用“導(dǎo)游圖”的視角來看看代碼層次:

紅色箭頭指出了,是寫在模塊中的,原來一個(gè).py文件就是一個(gè)模塊。模塊中可以寫函數(shù)和類,模塊可以放在包中。

函數(shù)

Python中最出名的函數(shù)一定是print()了,畢竟全世界都在用它say Hello World。Python函數(shù)其實(shí)和數(shù)學(xué)中的函數(shù)很像,比如y = f(x)。有函數(shù)名字、輸入和輸出。Python的函數(shù)結(jié)構(gòu)如下:

函數(shù)通過def關(guān)鍵字來定義:

def 函數(shù)名(參數(shù)列表):
函數(shù)體

參數(shù)列表有就有,無則無,多個(gè)參數(shù)用逗號(hào)分隔。例如:

def hello() :
print("Hello World!")

hello() # 調(diào)用函數(shù)

def max(a, b):
if a > b:
return a
else:
return b

a = 4
b = 5
print(max(a, b))

調(diào)用函數(shù),不需要再加def,直接函數(shù)名(參數(shù)列表)即可。參數(shù)既可以是變量,也可以是其他函數(shù),只要能一一對(duì)應(yīng)。return關(guān)鍵字用來返回值。return不是必需的,如果沒有,那么函數(shù)會(huì)把內(nèi)部代碼全部都執(zhí)行完再退出,如果有,函數(shù)會(huì)在return語(yǔ)句立刻退出,同時(shí)返回return語(yǔ)句的值,例如:

# 可寫函數(shù)說明
def sum( arg1, arg2 ):
# 返回2個(gè)參數(shù)的和."
total = arg1 + arg2
print ("函數(shù)內(nèi) : ", total)
return total
print("這里不會(huì)執(zhí)行!")

# 調(diào)用sum函數(shù)
total = sum( 10, 20 )
print ("函數(shù)外 : ", total)

為什么還要寫類,函數(shù)它不香么?這個(gè)問題有點(diǎn)大,我只能簡(jiǎn)單解釋一下,那就是因?yàn)椋愂前撕瘮?shù)的,如果有一天你發(fā)現(xiàn)函數(shù)不夠用了,那么可以用類試試,哈哈哈。

類是面向?qū)ο缶幊讨械母拍?,把?duì)象中共性的東西抽離出來而成。

類中的函數(shù)叫做方法,除了方法還有屬性(也就是變量),我寫個(gè)不嚴(yán)謹(jǐn)?shù)墓剑侯?= 屬性 + 方法,例如:

class People:
#定義屬性
name = ''
age = 0
#定義方法
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name, self.age))

類的使用跟函數(shù)一樣,需要調(diào)用,例如:

dongfanger = People() # 這叫做實(shí)例化對(duì)象
dongfanger.speak() # 調(diào)用方法

類的一大好處是,可以通過繼承來進(jìn)一步復(fù)用代碼。

模塊

模塊中可以包含模塊級(jí)代碼、函數(shù)和類。模塊與模塊之間是不能直接調(diào)用的,必須使用import關(guān)鍵字來導(dǎo)入。導(dǎo)入時(shí),模塊級(jí)代碼一定會(huì)被執(zhí)行,如果我們不想讓某些代碼執(zhí)行,那么可以添加一句if __name__ == '__main__':,例如

if __name__ == '__main__':
print('這里的代碼,僅在該模塊自身運(yùn)行時(shí)執(zhí)行')
else:
print('模塊被導(dǎo)入時(shí)執(zhí)行')

函數(shù)和類需要調(diào)用才會(huì)運(yùn)行,所以不存在這個(gè)問題。

包是一個(gè)目錄,特殊的地方在于需要包含一個(gè)__init__.py文件(內(nèi)容可以為空),這是為什么呢?設(shè)想一下import hello這條語(yǔ)句,Python從哪去找hello這個(gè)包,C盤D盤E盤,成千上萬(wàn)個(gè)文件,范圍太大了。所以需要把有Python模塊的目錄標(biāo)出來,只查找這些目錄就可以了。示例:

sound/ 頂層包
__init__.py 初始化 sound 包
formats/ 文件格式轉(zhuǎn)換子包
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 聲音效果子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ filters 子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...

命名空間

命名沖突是個(gè)頭疼的問題,Python提供了命名空間這個(gè)方法,把代碼塊劃分為不同的命名空間,同一個(gè)命名空間不能重名,不同命名空間可以重名,如圖所示:

命名空間一般有三種:

  • 內(nèi)置:Python內(nèi)置的名字。

  • 全局:模塊中定義的名字,包括模塊的函數(shù)、類、其他導(dǎo)入的模塊、模塊級(jí)的變量和常量。

  • 局部:函數(shù)中定義的名字,包括函數(shù)的參數(shù)和局部定義的變量。(類中定義的也是)

包里面是文件,文件名重復(fù)與否由操作系統(tǒng)判斷。

作用域

命名空間決定了變量的作用域,小的作用域只在內(nèi)部才有作用,比如函數(shù)內(nèi)的變量,模塊是不能用的:

def func():
a = 1
print(a) # 報(bào)錯(cuò)NameError: name 'a' is not defined

反之,大的作用域能作用到小的作用域:

a = 1

def func():
print(a)

func() # a = 1

如果不同作用域有相同名字的變量,Python的匹配順序?yàn)椋壕植?-> 全局 -> 內(nèi)置,例如:

a = 1

def func():
a = 2 # 不會(huì)作用到模塊的a

func() # 調(diào)用函數(shù)修改a的值
print(a) # a的值仍為1

函數(shù)內(nèi)部的a并不能影響到模塊級(jí)別的a,因?yàn)镻ython在找a時(shí),函數(shù)內(nèi)部已經(jīng)找到了,就不會(huì)再找了。

可以使用global關(guān)鍵字,把局部變量定義為全局變量,這樣模塊級(jí)別的變量也可以在函數(shù)內(nèi)修改了:

a = 1

def func():
global a # global聲明為全局
a = 2

func() # 調(diào)用函數(shù)修改a的值
print(a) # a的值變?yōu)?

另外,Python中只有模塊、類和函數(shù),才會(huì)產(chǎn)生作用域。其他代碼塊如if、while、for等是不會(huì)產(chǎn)生作用域的,也就是說這些語(yǔ)句內(nèi)定義的變量,外部也可以訪問,例如:

if True:
a = 1
print(a)

東方說

本文是Python入門系列這道前菜的最后一篇了,正餐Python進(jìn)階系列計(jì)劃在2021年1月開始推送,具體計(jì)劃我會(huì)寫在元旦的一篇文章中。Python入門系列并不算完整的教程,它的定位是進(jìn)階篇的鋪墊,做一些知識(shí)儲(chǔ)備,降低閱讀門檻。如果想學(xué)習(xí)完整教程,可以找菜鳥教程,也可以上B站看視頻(個(gè)人更推薦)。最后,為了知識(shí)共享和傳遞,我把入門的7篇文章都導(dǎo)出成pdf上傳了,可以在公眾號(hào)后臺(tái)回復(fù)“入門”下載哦。

參考資料:

https://www.runoob.com/python3/python3-function.html

https://www.runoob.com/python3/python3-class.html

https://www.runoob.com/python3/python3-module.html

https://www.runoob.com/python3/python3-namespace-scope.html

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
給妹子講python-S01E18初探函數(shù)作用域
Python 五個(gè)知識(shí)點(diǎn)搞定作用域
Python中堪稱最強(qiáng)的核心筆記,共計(jì)260頁(yè)內(nèi)容。
Python學(xué)習(xí)筆記總結(jié)(二):函數(shù)和模塊
Python程序員最常犯的十個(gè)錯(cuò)誤
關(guān)于import,你應(yīng)該知道這些內(nèi)容
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服