亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

講解python參數(shù)和作用域的使用

 更新時(shí)間:2013年11月01日 15:52:03   作者:  
本文會(huì)介紹如何將語(yǔ)句組織成函數(shù),還會(huì)詳細(xì)介紹參數(shù)和作用域的概念,以及遞歸的概念及其在程序中的用途。
本文會(huì)介紹如何將語(yǔ)句組織成函數(shù),還會(huì)詳細(xì)介紹參數(shù)和作用域的概念,以及遞歸的概念及其在程序中的用途。
一. 創(chuàng)建函數(shù)
函數(shù)是可以調(diào)用,它執(zhí)行某種行為并且返回一個(gè)值。用def語(yǔ)句即可定義一個(gè)函數(shù):(并非所有的函數(shù)都會(huì)返回一些東西)
復(fù)制代碼 代碼如下:

def fibs(num):
    result = [0,1]
    for i in range(num-2):
        result.append(result[-2]+result[-1])
    return result

記錄函數(shù)
如果想給函數(shù)寫文檔以便讓人理解的話,可以加入注釋(以#開(kāi)頭)。另一個(gè)方式就是直接寫上字符串,它會(huì)作為函數(shù)的一部分進(jìn)行存儲(chǔ),這成為文檔字符串。
復(fù)制代碼 代碼如下:

def square(x):
    '計(jì)算x的平方'
    return x*x

#文檔字符串可以按如下方式訪問(wèn):
>>> square._doc_
'計(jì)算x的平方'

二. 參數(shù)魔法
函數(shù)使用起來(lái)很簡(jiǎn)單,創(chuàng)建起來(lái)也不復(fù)雜,但是函數(shù)參數(shù)的用法有時(shí)就不可思議了。
2.1 我能改變參數(shù)嗎
 在函數(shù)內(nèi)為參數(shù)賦予新值,不會(huì)改變外部任何變量的值:
復(fù)制代碼 代碼如下:

>>> def to_change(n):
    n = 's'
>>> name = 'b'
>>> to_change(name)
>>> name
'b'

字符串(以及數(shù)字和元組)是不可變的,即無(wú)法被修改。但是如果將可變的數(shù)據(jù)結(jié)構(gòu)如列表用作參數(shù)時(shí),參數(shù)就會(huì)被改變了。
復(fù)制代碼 代碼如下:

>>> def change(n):
    n[0] = 'ss'
>>> names = ['aa','zz']
>>> change(names)
>>> names
['ss', 'zz']


2.2 關(guān)鍵字參數(shù)和默認(rèn)值
目前為止,我們所使用的參數(shù)都叫做位置參數(shù)。有時(shí)候參數(shù)順序是很難記住的,為了讓事情簡(jiǎn)單些,可以提供參數(shù)的名字:
復(fù)制代碼 代碼如下:

>>> def hello(greeting,name):
        print '%s,%name!'
>>> hello(greeting = 'hello',name = 'world')
hello,world!

這樣一來(lái),參數(shù)順序就完全沒(méi)影響了,但是參數(shù)名和值一定要對(duì)應(yīng)。
這樣使用參數(shù)名提供的參數(shù)叫做關(guān)鍵字參數(shù),主要作用在于可以明確每個(gè)參數(shù)的作用。
關(guān)鍵字參數(shù)最厲害的地方在于可以在函數(shù)中給參數(shù)提供默認(rèn)值:
>>> def hello(greeting = 'hello',name = 'world'):
        print '%s,%name!'
當(dāng)參數(shù)具有默認(rèn)值時(shí),調(diào)用的時(shí)候就不用提供參數(shù)了,可以不提供,提供一些或提供所有的參數(shù)。
復(fù)制代碼 代碼如下:

>>> hello()
'hello,world!'
>>> hello('greeting')
'greeting,world!'
>>> hello(name = 'universe')
'hello,universe!'
 

2.3 收集參數(shù)
如果函數(shù)中能存儲(chǔ)多個(gè)名字就好了,用戶可以給函數(shù)提供任意多的參數(shù),我們需要這樣做:定義函數(shù)時(shí)提供一個(gè)參數(shù),在前面加個(gè)星號(hào)。
復(fù)制代碼 代碼如下:

>>> def print_para(*paras):
    print paras
>>> print_para('ss')
('ss',)
>>> print_para(1,2,3)
(1, 2, 3)

參數(shù)前的星號(hào)將所有值放置在同一個(gè)元組中,可以說(shuō)是將這些“其余位置的參數(shù)”收集起來(lái)再使用。如果不提供任何收集元素,參數(shù)得到的是一個(gè)空元組()。
但是如果需要處理關(guān)鍵字參數(shù)的“收集”操作,我們需要2個(gè)星號(hào)“**”:
復(fù)制代碼 代碼如下:

>>> def print_params(x,y,z=3,*pospar,**keypar):
    print x,y,z
    print pospar
    print keypar

>>> print_params(1,2,3,5,6,7,foo=1,bar=2)
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}
>>> print_params(1,2)
1 2 3
()
{}

請(qǐng)仔細(xì)體味上面的例子,前三個(gè)參數(shù)是固定的,第四個(gè)參數(shù)pospar是位置參數(shù),可以收集多個(gè)參數(shù),第五個(gè)參數(shù)是關(guān)鍵字參數(shù),可以收集多個(gè)關(guān)鍵字參數(shù)。當(dāng)沒(méi)有輸入時(shí),默認(rèn)為空元組或者空字典。

2.4 反轉(zhuǎn)過(guò)程
剛剛已經(jīng)討論過(guò)如何將參數(shù)收集為元組和字典了,如果使用*和**的話,還可以執(zhí)行相反的操作。(1)在調(diào)用的時(shí)候使用
復(fù)制代碼 代碼如下:

>>> def add(x,y):
    return x+y
>>> params =(1,2)
>>> add(*params)
3

(2)在定義的時(shí)候使用
復(fù)制代碼 代碼如下:

>>> def with_stars(**kds):
    print kds['name'],'is',kds['age'],'years old'
>>> args = {'name':'Mr.Gumby','age':42}   
>>> with_stars(**args)
Mr.Gumby is 42 years old
 

三. 作用域
在執(zhí)行x=1賦值語(yǔ)句后,名稱x引用到值1。這就像用字典一樣,鍵引用值,當(dāng)然,變量和所對(duì)應(yīng)的值用的是個(gè)‘不可見(jiàn)'的字典。內(nèi)建vars函數(shù)可以返回這個(gè)字典:
復(fù)制代碼 代碼如下:

>>> x=1
>>> scope = vars()
>>> scope['x']
1
>>> scope['x'] += 1
>>> x
2

這個(gè)不可見(jiàn)的字典叫做命名空間或者作用域。除了全局作用域外,每個(gè)函數(shù)調(diào)用都會(huì)創(chuàng)建一個(gè)新的作用域。
一般學(xué)過(guò)編程的基本都知道什么是作用域了,這里就不細(xì)講了。

四. 遞歸
遞歸的定義包括它們自身定義內(nèi)容的引用。
一個(gè)有用的遞歸函數(shù)包含以下幾部分:
(1)當(dāng)函數(shù)直接返回值時(shí)有基本實(shí)例(最小可能性問(wèn)題)
(2)遞歸實(shí)例,包括一個(gè)或者多個(gè)問(wèn)題最小部分的遞歸調(diào)用。
這里的關(guān)鍵是將問(wèn)題分解為小部分,遞歸不能永遠(yuǎn)繼續(xù)下去,因?yàn)樗偸且宰钚】赡苄詥?wèn)題結(jié)束,而這些問(wèn)題又存儲(chǔ)在基本實(shí)例中。
下面我們來(lái)看3個(gè)經(jīng)典的遞歸例子:
A.階乘
>>> def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
[/code]
B.冪
復(fù)制代碼 代碼如下:

>>> def power(x,n):
    if n == 0:
        return 1
    else:
        return x * power(x,n-1)

C.二元查找(假設(shè)number必然在序列sequence中)
復(fù)制代碼 代碼如下:

>>> def search(sequence,number,lower,upper):
    if lower == upper:
        assert num == sequence[upper]
        return upper
    else:
        middle = (lower+upper) // 2
        if number > sequence[middle]:
            return search(sequence,number,middle+1,upper)
        else:
            return search(sequence,number,lower,middle)

相關(guān)文章

  • 詳解mac python+selenium+Chrome 簡(jiǎn)單案例

    詳解mac python+selenium+Chrome 簡(jiǎn)單案例

    這篇文章主要介紹了詳解mac python+selenium+Chrome 簡(jiǎn)單案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python格式化壓縮后的JS文件的方法

    Python格式化壓縮后的JS文件的方法

    這篇文章主要介紹了Python格式化壓縮后的JS文件的方法,實(shí)例分析了Python格式化文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • django模板加載靜態(tài)文件的方法步驟

    django模板加載靜態(tài)文件的方法步驟

    這篇文章主要介紹了django模板加載靜態(tài)文件的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 如何在django里上傳csv文件并進(jìn)行入庫(kù)處理的方法

    如何在django里上傳csv文件并進(jìn)行入庫(kù)處理的方法

    這篇文章主要介紹了如何在django里上傳csv文件并進(jìn)行入庫(kù)處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python圖像處理之Hough變換檢測(cè)直線

    Python圖像處理之Hough變換檢測(cè)直線

    霍夫變換是一種特征檢測(cè)(feature?extraction),被廣泛應(yīng)用在圖像分析,本文將利用Hough變換實(shí)現(xiàn)直線檢測(cè),感興趣的小伙伴可以了解一下
    2023-07-07
  • 使用python創(chuàng)建Excel工作簿及工作表過(guò)程圖解

    使用python創(chuàng)建Excel工作簿及工作表過(guò)程圖解

    這篇文章主要介紹了使用python創(chuàng)建Excel工作簿及工作表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python excel多行合并的方法

    python excel多行合并的方法

    這篇文章主要介紹了python excel多行合并的方法,幫助大家更好的利用python處理excel表格,感興趣的朋友可以了解下
    2020-12-12
  • Python如何獲取文件指定行的內(nèi)容

    Python如何獲取文件指定行的內(nèi)容

    在本篇文章里小編給大家分享的是關(guān)于Python獲取文件指定行的內(nèi)容的方法,有需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • python游戲地圖最短路徑求解

    python游戲地圖最短路徑求解

    這篇文章主要為大家詳細(xì)介紹了python游戲地圖最短路徑的求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中threading超線程用法實(shí)例分析

    python中threading超線程用法實(shí)例分析

    這篇文章主要介紹了python中threading超線程用法,實(shí)例分析了Python中threading模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論