成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

4. Python中的函數(shù)和作用域

Simon / 988人閱讀

摘要:可以簡(jiǎn)單理解一塊可重復(fù)使用的代碼,我們稱之為函數(shù),當(dāng)我們調(diào)用函數(shù)時(shí),這個(gè)函數(shù)才會(huì)執(zhí)行??梢钥吹胶瘮?shù)內(nèi)是一個(gè)作用域,外面是訪問不到的一般情況。當(dāng)進(jìn)入一個(gè)函數(shù)時(shí),一個(gè)新的作用域就被創(chuàng)建了。

Python中的函數(shù)和作用域 1. 函數(shù) 1.1 函數(shù)的簡(jiǎn)介

當(dāng)我們?cè)谥貜?fù)使用某一功能時(shí),我們可能會(huì)寫很多重復(fù)的代碼,例如我們求圓的周長(zhǎng),當(dāng)圓的直徑改變時(shí),是不是我們又要重新寫一遍計(jì)算過程呢?如果涉及到很復(fù)雜的過程,而下次使用僅僅改變參數(shù),那么我們還有必要重復(fù)這一過程嗎?

這時(shí)我們可以利用函數(shù)來(lái)解決這一問題。一個(gè)功能就像黑盒一樣,我們不需要知道它是怎么工作的,我們只要知道接口(輸入,輸出)即可使用。

例如Python的內(nèi)置函數(shù)print我們只要知道它需要我們提供哪些參數(shù),以及它會(huì)給我們?cè)鯓拥妮敵黾纯?。這就是所謂的抽象,我們不知道工作原理,但也能使用它。所以我們可以寫一個(gè)函數(shù)(黑盒),設(shè)置直徑為輸入,周長(zhǎng)為輸出,當(dāng)函數(shù)寫好后,我們只要輸入直徑即可,不用考慮函數(shù)內(nèi)部是如何計(jì)算的,我們得到輸出后,繼續(xù)做我們想做的事情。

當(dāng)我們想做一道菜時(shí),有人負(fù)責(zé)洗菜,有人切菜,有人炒菜,將這些人的工作合在一起,就完成了做菜這個(gè)任務(wù),這就是分解的思想,我們將這個(gè)任務(wù)看成是函數(shù),許多函數(shù)在一起完成了一件比較大的事情。

可以簡(jiǎn)單理解一塊可重復(fù)使用的代碼,我們稱之為函數(shù)(function),當(dāng)我們調(diào)用函數(shù)時(shí),這個(gè)函數(shù)才會(huì)執(zhí)行。

1.2 函數(shù)的特征

名稱

參數(shù) (0 或 多個(gè))

有docstring (可選,但是建議有,注釋的意思)

函數(shù)體

返回一些值

以下是定義一個(gè)函數(shù)簡(jiǎn)單的例子,注意函數(shù)內(nèi)要有四個(gè)空格的縮進(jìn),如果沒有返回值的話,會(huì)默認(rèn)返回None:

#def是用來(lái)定義函數(shù)的關(guān)鍵字
#is_even是函數(shù)的名稱
#i是參數(shù)(參數(shù)可以是任何類型)
#三個(gè)引號(hào)括起來(lái)的是docstring
#docstring下面的語(yǔ)句是函數(shù)體
#return后的是返回值
def is_even( i ):
    """
    Input: i是一個(gè)正的int類型
    Returns True 如果 i 是偶數(shù), 否則返回 False
    """
    print("inside is_even")
    return i%2 == 0
#調(diào)用函數(shù),并用a接收返回值
a = is_even(2)
print(a)
2. 作用域 2.1 形參和實(shí)參

首先我們先不涉及編程。高中的函數(shù)y = f(x),這個(gè)x就相當(dāng)于是形參,指一種抽象,將我們用f(3)的時(shí)候,這個(gè)3就是實(shí)參了,就是實(shí)際我們使用的值,形參和實(shí)參大致就是這個(gè)意思,不要搞混了。例如:

def f( x ):#x是形參
    x = x + 1
    print("in f(x): x =", x)
    return x
#以下是調(diào)用函數(shù)
x = 3#初始化x
z = f( x )#調(diào)用函數(shù),傳入實(shí)參,將返回值給z
2.2 函數(shù)作用域

利用pythontutor網(wǎng)站對(duì)代碼的執(zhí)行進(jìn)行可視化,我把所有步驟都截了下來(lái),先看圖,右側(cè)反映了變量的變化情況。









可以看到函數(shù)內(nèi)是一個(gè)作用域,外面是訪問不到的(一般情況)。當(dāng)進(jìn)入一個(gè)函數(shù)時(shí),一個(gè)新的作用域就被創(chuàng)建了。函數(shù)內(nèi)的x和外面的x不是一個(gè)xx是不可變量,這和之后的list等數(shù)據(jù)類型不一樣,之后再說。

函數(shù)里可以訪問外面的變量

函數(shù)里不可以修改外部定義的變量

以下是是幾個(gè)例子,如果有不清楚,可以進(jìn)入 www.pythontutor.com(我推薦的代碼可視化網(wǎng)站)中嘗試運(yùn)行。

第一個(gè)例子,在外邊定義了一個(gè)x,但是在f內(nèi)又定義了一個(gè)x,這兩個(gè)x不是一個(gè)x,函數(shù)內(nèi)部使用的x是函數(shù)內(nèi)部定義的。

def f(y):
    x = 1
    x += 1
    print(x)
x = 5
f(x)
print(x)

第二個(gè)例子,在g中使用的x是外部定義的x

def g(y):
    print(x)
    print(x + 1)
x = 5
g(x)
print(x)

第三個(gè)例子,會(huì)報(bào)錯(cuò),不能在內(nèi)部修改外部的值,UnboundLocalError: local variable "x" referenced before assignment

def h(y):
    x += 1
x = 5
h(x)
print(x)
3. 參考

參考了Mit 6.0001的課件

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43133.html

相關(guān)文章

  • PyTips 0x04 - Python 閉包與作用

    摘要:項(xiàng)目地址閉包在計(jì)算機(jī)科學(xué)中,閉包英語(yǔ),又稱詞法閉包或函數(shù)閉包,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。 項(xiàng)目地址:https://git.io/pytips 閉包(Closure) 在計(jì)算機(jī)科學(xué)中,閉包(英語(yǔ):Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是...

    leejan97 評(píng)論0 收藏0
  • Python 3 學(xué)習(xí)筆記之——變量作用、模塊

    摘要:局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個(gè)程序范圍內(nèi)訪問。調(diào)用函數(shù)時(shí),所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。 1. 變量作用域 Python 中,程序的變量并不是在哪個(gè)位置都可以訪問的,訪問權(quán)限決定于這個(gè)變量是在哪里賦值的。變量的作用域決定了在哪一部分程序可以訪問哪個(gè)特定的變量名稱。Python 的作用域一共有4種,分別是: L (Local) 局部作用...

    lijinke666 評(píng)論0 收藏0
  • Python與家國(guó)天下

    摘要:正如儒家經(jīng)典所闡述修身齊家治國(guó)平天下。除此之外,模塊還有如下最基本的屬性在一個(gè)模塊的全局空間里,有些屬性是全局起作用的,稱之為全局變量,而其它在局部起作用的屬性,會(huì)被稱為局部變量。 導(dǎo)讀:Python貓是一只喵星來(lái)客,它愛地球的一切,特別愛優(yōu)雅而無(wú)所不能的 Python。我是它的人類朋友豌豆花下貓,被授權(quán)潤(rùn)色與發(fā)表它的文章。如果你是第一次看到這個(gè)系列文章,那我強(qiáng)烈建議,請(qǐng)先看看它寫的前...

    姘擱『 評(píng)論0 收藏0
  • Python與家國(guó)天下

    摘要:正如儒家經(jīng)典所闡述修身齊家治國(guó)平天下。除此之外,模塊還有如下最基本的屬性在一個(gè)模塊的全局空間里,有些屬性是全局起作用的,稱之為全局變量,而其它在局部起作用的屬性,會(huì)被稱為局部變量。 導(dǎo)讀:Python貓是一只喵星來(lái)客,它愛地球的一切,特別愛優(yōu)雅而無(wú)所不能的 Python。我是它的人類朋友豌豆花下貓,被授權(quán)潤(rùn)色與發(fā)表它的文章。如果你是第一次看到這個(gè)系列文章,那我強(qiáng)烈建議,請(qǐng)先看看它寫的前...

    felix0913 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<