最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

講解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)文章

  • python3實現(xiàn)的zip格式壓縮文件夾操作示例

    python3實現(xiàn)的zip格式壓縮文件夾操作示例

    這篇文章主要介紹了python3實現(xiàn)的zip格式壓縮文件夾操作,結(jié)合實例形式分析了Python3基于zipfile模塊實現(xiàn)zip格式文件壓縮的相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Python中連通域分割Two-Pass算法的原理與實現(xiàn)詳解

    Python中連通域分割Two-Pass算法的原理與實現(xiàn)詳解

    兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標(biāo)記,本文將詳細(xì)介紹Two-Pass算法的原理與實現(xiàn),需要的可以參考下
    2023-12-12
  • python單例模式的多種實現(xiàn)方法

    python單例模式的多種實現(xiàn)方法

    這篇文章主要介紹了python單例模式的多種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python Django框架單元測試之文件上傳測試示例

    Python Django框架單元測試之文件上傳測試示例

    這篇文章主要介紹了Python Django框架單元測試之文件上傳測試,結(jié)合實例形式分析了Django框架單元測試中文件上傳測試的操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • Python的Django框架中的表單處理示例

    Python的Django框架中的表單處理示例

    這篇文章主要介紹了Python的Django框架中的表單處理示例,表單處理是Django中的基礎(chǔ)操作,需要的朋友可以參考下
    2015-07-07
  • python定時任務(wù)timeloop庫用法實例詳解

    python定時任務(wù)timeloop庫用法實例詳解

    有些時候我們需要每隔一段時間就要執(zhí)行一段程序,或者是往復(fù)循環(huán)執(zhí)行某一個任務(wù),下面這篇文章主要給大家介紹了關(guān)于python定時任務(wù)timeloop庫用法的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Numpy維度知識總結(jié)

    Numpy維度知識總結(jié)

    這篇文章主要介紹了Numpy維度知識總結(jié),因為在numpy里一維既可以做行向量也可以做列向量,那對于任意一個給定的一維向量,我們就無法確定他到底是行向量還是列向量,為了防止這種尷尬的境地,習(xí)慣上用二維矩陣而不是一維矩陣來表示行向量和列向量,需要的朋友可以參考下
    2023-09-09
  • 最新評論

    资阳市| 大厂| 安溪县| 玉门市| 全南县| 德令哈市| 梁河县| 博客| 涞水县| 南开区| 襄垣县| 喀喇沁旗| 沁水县| 彭水| 开鲁县| 阿克| 昌黎县| 开远市| 银川市| 平江县| 衡山县| 和平区| 遂宁市| 鸡西市| 黄大仙区| 平南县| 隆安县| 镇康县| 昌宁县| 自贡市| 红桥区| 呼玛县| 宣恩县| 镇赉县| 湛江市| 兰西县| 光泽县| 灵川县| 海口市| 洱源县| 中卫市|