欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

#文檔字符串可以按如下方式訪問:
>>> square._doc_
'計算x的平方'

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

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

字符串(以及數(shù)字和元組)是不可變的,即無法被修改。但是如果將可變的數(shù)據(jù)結(jié)構(gòu)如列表用作參數(shù)時,參數(shù)就會被改變了。
復(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ù)的名字:
復(fù)制代碼 代碼如下:

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

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

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

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

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

參數(shù)前的星號將所有值放置在同一個元組中,可以說是將這些“其余位置的參數(shù)”收集起來再使用。如果不提供任何收集元素,參數(shù)得到的是一個空元組()。
但是如果需要處理關(guān)鍵字參數(shù)的“收集”操作,我們需要2個星號“**”:
復(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
()
{}

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

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

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

(2)在定義的時候使用
復(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賦值語句后,名稱x引用到值1。這就像用字典一樣,鍵引用值,當(dāng)然,變量和所對應(yīng)的值用的是個‘不可見'的字典。內(nèi)建vars函數(shù)可以返回這個字典:
復(fù)制代碼 代碼如下:

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

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

四. 遞歸
遞歸的定義包括它們自身定義內(nèi)容的引用。
一個有用的遞歸函數(shù)包含以下幾部分:
(1)當(dāng)函數(shù)直接返回值時有基本實例(最小可能性問題)
(2)遞歸實例,包括一個或者多個問題最小部分的遞歸調(diào)用。
這里的關(guān)鍵是將問題分解為小部分,遞歸不能永遠(yuǎn)繼續(xù)下去,因為它總是以最小可能性問題結(jié)束,而這些問題又存儲在基本實例中。
下面我們來看3個經(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 簡單案例

    詳解mac python+selenium+Chrome 簡單案例

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

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

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

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

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

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

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

    Python圖像處理之Hough變換檢測直線

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

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

    這篇文章主要介紹了使用python創(chuàng)建Excel工作簿及工作表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    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游戲地圖最短路徑的求解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中threading超線程用法實例分析

    python中threading超線程用法實例分析

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

最新評論