1. 程式人生 > >復習 函數

復習 函數

python 函數

1.1 函數定義

函數

(1)函數就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給他取一個名字。

(2)可以通過函數名在程序的不同地方多次執行(即,函數的調用)

(3)預定義函數,可以直接使用

(4)自定義函數,用戶自己編寫

(5)為社麽使用函數:

① 降低編程難度

- 通常將一個復雜的大問題分解成一系列小問題,然後將小問題劃分成更小的問題,當問題細化為足夠簡單時,就可以分而治之,各個小問題解決了,大問題就迎刃而解了。

② 代碼重用

- 避免重復勞動,提升效率

定義函數:

函數的定義和調用:

    - def 函數名([參數列表]):        // 定義
    - 函數名([參數列表])         // 調用


函數名的命名規則:

函數名可以是以字母,數字,下劃線命名的,但是不能以數字開頭


函數名在定義的時候跟變量有點區別

"變量"都是定義成 小寫 的;

"函數名" 如果是由兩個單詞組成,第二個單詞首字母要大寫,也就是說,如果由多個單詞組成,除了開頭第一個單詞首字母不要大寫,其余單詞首字母都要大寫;兩個單詞之間可以通過下劃線連接;

"類"的命名:每個單詞首字母都要大寫;

要養成這樣的規範習慣。


定義函數例子:

def fun():
    print "hello world"

函數調用:


fun()
hello world


舉例:

當我執行腳本的時候,提示我從鍵盤讀取輸入:

技術分享圖片

結果:

技術分享圖片


1.2 函數的參數

形參和實參:

- 在定義函數的時候,函數名後面括號中的變量名稱叫做“形式參數”,或者稱為“形參”

- 在調用函數時,函數名後面括號中的變量名稱叫做“實際參數”,或者稱為“實參”


形參:

    def  fun(x, y):
        print x + y

x , y 是2個形式參數


調用(傳參):

fun(2, 3)
5


舉例:

判斷並打印最大的數

技術分享圖片

調用

技術分享圖片


實際參數:

import sys
print sys.argv[1]

打印參數

python test.py 1 2
1

舉例:

判斷是否是數字

技術分享圖片

結果:

技術分享圖片


1.3 函數的默認參數

練習

打印系統所有的PID

要求從 /proc 讀取

os.listdir()


import os 
os.listdir()

os.listdir() 幫助信息

技術分享圖片

用法:

os.listdir('/proc')


腳本:

import sys
import os
def isNum(s):
    for i in s:
        if i in '0123456789':
            pass
        else:
            break
    else:
            print s
for i in os.listdir('/proc'):
    isNum(i)



默認參數

缺省參數(默認參數)

def fun(x, y = 100):
    print x, y

調用:

fun(1, 2)
fun(1)


結果自然不同

舉例解釋:

技術分享圖片

調用的時候,實參會代替100

技術分享圖片

只有一個參數的時候,y使用默認的值


舉例:

技術分享圖片

若指定參數,則

技術分享圖片

錯誤舉例:

def fun(x=2, y):
    print x + y

報錯:

技術分享圖片

結論:

默認參數只能在最後的形參上,不能在前面或中間,只能在最後,方向從右到左,比如有3個參數,定義默認參數可以是"最後一個參數" ,或"第二個和最後一個",或"第一和第二和第三個參數"都定義。



默認參數主要看位置

技術分享圖片

本節總結:

默認參數就是我們在調用函數的時候,如果沒有給函數傳值得話,會使用默認參數給函數傳值


1.4 函數的變量

局部變量和全局變量

- python中的任何變量都有特定的作用域

- 在函數中定義的變量一般只能在該函數內部使用,這些只能在程序特定部分使用的變量,稱之為局部變量;

- 在一個文件頂部定義的變量可以供文件中的任何函數調用,這些可以為整個程序所使用的變量稱之為全局變量。


局部變量:

def fun():
    x = 100 
    print x
fun()


全局變量:

x = "global var"
def fun():
    x = 100
    print x
fun()
print x



通過關鍵字聲明:

在函數裏面,把x聲明為全局變量

x = 100
def fun():
    global x
    x += 1
    print x
fun()


同理,在函數內部將關鍵字聲明為全局變量,當函數被調用的時候,在外部能打印出函數內部的變量:

x = 100
def fun():
    global x
    x += 1
    global y
    y = 1
fun()
print x
print y


locals 的用法(試一下):

x = 100
def fun():
    x = 1
    y = 1
    print locals()
    
fun()
print locals()

鏈接:http://blog.csdn.net/scelong/article/details/6977867


1.5 函數的返回值

- 函數被調用後會返回一個指定的值

- 函數調用後默認返回None

- return 返回值

- 返回值可以是任意類型

- return執行後,函數終止

- return與print的區別


函數被調用後會返回一個指定值

技術分享圖片

執行腳本:

技術分享圖片

None就是函數的返回值


修改腳本:

技術分享圖片

執行腳本:

技術分享圖片

這個返回值可是任意類型,也可以返回True


1.6 多類型傳值和冗余參數

多類型傳值

定義函數

def fun(x, y):
    return x + y

print fun(3, 5)

將一個元組傳入函數

t = (3, 7)
fun(*t)

10	#返回的函數結果


舉例:

傳入多個參數的三種形式:

技術分享圖片

錯誤的寫法:

技術分享圖片

所以,元組不能寫在前面



另外,還可以指定參數值,如下

技術分享圖片

傳入的參數名字一定要和函數內形參的名字要一致,下面兩種錯誤的方法:

技術分享圖片

'x'被函數當成了一個字符串變量


技術分享圖片

a,b,c 報類型錯誤,與函數的形參不一致,函數不知道這三個新導入的參裏面是什麽

名字一定要和形參一致。



函數傳入字典的方法

把字典作為參數傳入函數

技術分享圖片

同理,定義的字典裏面的 key 也要和函數裏面的形參一致

定義的字典裏面的key,要加引號,比如 'x':1,否則,不加引號字典會把x定義為變量,定義字典會報錯。

技術分享圖片

總結:

可以向函數內部傳入元組和字典,可以把元組裏面的元素作為參數傳給函數,也可以把字典裏面的value作為參數傳給函數,但是定義字典的時候字典的key一定要和函數的形參一致。


冗余參數

定義函數的時候,函數有3個參數,調用函數的時候,只能給傳3個參數,不能傳多,也不能傳少

有時候,我們要讓函數接收多一些的參數,但是傳的時候可能只傳了少數幾個,或者傳入更多參數。

def fun(x, y=1, *args, **kwargs)

解釋:

x 叫默認參數(命名參數)

y=1 叫關鍵字參數

*args 和 **kwargs 叫 可變參數(或者冗余參數)


舉例:

定義函數

技術分享圖片

傳入一個參數,返回

技術分享圖片

再傳入一個參數,返回

技術分享圖片

2被認為是冗余參數,並且是以元組的形式往裏傳。

傳入字符串、列表傳入進去,都會存入元組裏:

技術分享圖片

再傳入一個參數 y=2:

技術分享圖片

返回的是字典,可以多傳入幾個:

技術分享圖片

多類型傳值裏面我們定義了元組類型的變量 t,我們把他作為參數傳入函數

技術分享圖片

同理,字典也可以以參數形式傳入函數或者 a=3這種形式:

技術分享圖片

1.7 函數的遞歸調用

遞歸就是在函數內部調用他自己

通常用遞歸去調用階乘

最基本的階乘:就是循環方式實現階乘

舉例1:

技術分享圖片

舉例2:

技術分享圖片

下面使用遞歸的方式實現階乘:

首先,遞歸的註意事項:

技術分享圖片

所謂"默認結果" 就是當參數等於0的時候,返回1


形象一點:

技術分享圖片

上圖 f(0) 的時候,結果就是1

舉例:

技術分享圖片

舉例:

技術分享圖片

復習 函數