Python函數

高洛峰
高洛峰原創
2016-11-23 10:38:171151瀏覽

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。

函數能提高應用的模組性,和程式碼的重複使用率。你已經知道Python提供了許多內建函數,像是print()。但你也可以自己創見函數,這叫做使用者自訂函數。

定義一個函數

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

函數程式碼區塊以def關鍵字開頭,後接函數識別碼名稱和圓括號()。

任何傳入參數和自變數必須放在圓括號中間。圓括號之間可以用來定義參數。

函數的第一行語句可以選擇性地使用文件字串—用於存放函數說明。

函數內容以冒號起始,且縮排。

Return[expression]結束函數,選擇性地傳回一個值給呼叫方。不含表達式的return相當於回傳 None。

語法

def functionname( parameters ):

   "函數_文檔字串"

   

預設情況下,參數值和參數名稱是按函數宣告中定義的的順序匹配起來的。

實例

以下為一個簡單的Python函數,它將一個字串作為傳入參數,再列印到標準顯示設備上。

def printme( string ):

   "列印傳入的字串到標準顯示裝置上"

 定義一個函數只給了函數一個名稱,指定了函數裡包含的參數,和程式碼區塊結構。

這個函數的基本結構完成以後,你可以透過另一個函數呼叫執行,也可以直接從Python提示字元執行。

如下實例呼叫了printme()函數:

#!/usr/bin/python

 

# Function definpin

 

# Functioncom   "印製任何傳入的字串"

   print string

 

# Now you can call printme function

printme("我要呼叫相同

以上實例輸出結果:

我要呼叫使用者自訂函數!

再次呼叫相同函數

   

再次呼叫相同函數

   

)。在Python裡都是按引用傳遞。如果你在函數裡修改了參數,那麼在呼叫這個函數的函數裡,原始的參數也被改變了。例如:

#!/usr/bin/python

 

# 可寫函數說明

def changeme(mylist append([1 ,2,3,4])

   print "函數內取值: ", mylist

 

# 調用changeme函數

mylist = [10,20,300me函數

); "函數外取值: ", mylist

   

傳入函數的和在末尾新增內容的物件用的是同一個引用。故輸出結果如下:

函數內取值:  [10, 20, 30, [1, 2, 3, 4]]

函數外取值: 2, 3, 4]]

函數外取值: 2, 3, 4]]

   

參數

以下是呼叫函數時可使用的正式參數型別:

必備參數

省缺不定編號參數備參數

必備參數須以正確的順序傳入函數。呼叫時的數量必須和聲明時的一樣。

呼叫printme()函數,你必須傳入一個參數,不然會出現語法錯誤:

#!/usr/bin/python

 

):

   "印製任何傳入的字串"

   print string

 

#呼叫printme函數

Traceback (most recent call last):

  File "test.py", line 11, in 

    printme()

   

命名參數

命名參數和函數呼叫關係緊密,呼叫方用參數的命名決定傳入的參數值。你可以跳過不傳的參數或亂序傳參,因為Python解釋器能夠用參數名稱來匹配參數值。用命名參數呼叫printme()函數:

#!/usr/bin/python

 

#可寫函數說明

"

   print string

 

#呼叫printme函數

printme( str = "My string")

 

My string

   

下例能將命名參數順序不重要呈現得更清楚:

#!/usr/bin/python

 

#可寫函數說明

defh info(

#任何傳入的字串"

   print "Name: ", name

   print "Age ", age

  

以上實例輸出結果:

Name:  miki

Age  50

   

值。下例會印出預設的age,如果age沒有被傳入:

#!/usr/bin/python

 

#

   "印製任何傳入的字串"

   print "Name: ", name

   print "Age ", age

   print "Age ", age

infoinfo )

printinfo( name="miki" )

   

以上實例輸出結果:

Name: 

Age  35

   

不定長參數

你可能需要一個函數能處理比當初宣告時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,宣告時不會命名。基本語法如下:

def functionname([formal_args,] *var_args_tuple ):

   po [popumo🜎ion🎠):

   

   

加了星號( *)的變數名稱會存放所有未命名的變數參數。選擇不多傳參數也可。下列實例:

#!/usr/bin/python

 

# 可寫函數說明

def printinfo(sarg1, 

   print "輸出: "

   print arg1

   for var in vartuple:

      print var

info

      

printinfo( 70, 60, 50 )

   

以上實例輸出結果:

輸出:

10

輸出:

70

60 da關鍵字能創造小型匿名函數。這種函數得名於省略了用def宣告函數的標準步驟。

Lambda函數能接收任何數量的參數但只能傳回一個表達式的值,同時只能不能包含指令或多個表達式。

匿名函數不能直接呼叫print,因為lambda需要一個表達式。

lambda函數擁有自己的名字空間,且無法存取自有參數清單之外或全域名字空間裡的參數。

雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。

語法

lambda函數的語法只包含一個語句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

lambda [arg1 [,arg2,.....argn]]:expression

#!/usr/bin/python

 

#可寫函數說明

sum = lambda arg1, arg2: arg1

sum = lambda arg1, arg2: arg1

sum  "Value of total : " , sum( 10, 20 )

print "Value of total : ", sum( 20, 20 )

   

 total :  30

Value of total :  40

   

return語句

return語句[表達式]退出函數,選擇性地向呼叫方傳回一個表達式。不含參數值的return語句傳回None。之前的例子都沒有示範如何回傳數值,下例就告訴你怎麼做:

#!/usr/bin/python

 

:

   # 返回2個參數的和."

   total = arg1 + arg2

   print 

 

# 呼叫sum函數

total = sum( 10, 20 );

print "Outside the function : ", total

   

以上實例輸出結果:

Outside the function :  30

   

變量作用域

一個程式的所有的變數並不是在哪個位置都可以存取的。變數名稱。作用域。下列例子:

#!/usr/bin/python

 

total = 0; # This is glo vartotal = 0; # This is可寫arg2 ):

#回傳2個參數的和."

   total = arg1 + arg2; # total在這裡是局部變數.

   printŠ

 

#呼叫sum函數

sum( 10, 20 );

print "Outside the function global total : ", total

我 function local total :  30

Outside the function global total :  0

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Python模組下一篇:Python模組