1. 程式人生 > >Python 函數(二)

Python 函數(二)

有一個 name pan nbsp 匿名函數 例子 之前 ++ 默認參數

參數

以下是調用函數時可使用的正式參數類型:

  • 必備參數
  • 關鍵字參數
  • 默認參數
  • 不定長參數

必備參數

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

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可寫函數說明
def printme( str ):
   "打印任何傳入的字符串"
   print str;
   return;
 
#調用printme函數
printme();

以上實例輸出結果:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme();
TypeError: printme() takes exactly 1 argument (0 given)






關鍵字參數

關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值。

使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。

以下實例在函數 printme() 調用時使用參數名:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可寫函數說明
def printinfo( name, age ):
   "打印任何傳入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
 
#調用printinfo函數
printinfo( age=50, name="miki" );

缺省參數

調用函數時,缺省參數的值如果沒有傳入,則被認為是默認值。下例會打印默認的age,如果age沒有被傳入:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可寫函數說明
def printinfo( name, age = 35 ):
   "打印任何傳入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
printinfo( name="miki" );

以上實例輸出結果:

Name:  miki
Age  35

不定長參數

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

def functionname([formal_args,] *var_args_tuple ):
   "函數_文檔字符串"
   function_suite
   return [expression]

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數說明
def printinfo( arg1, *vartuple ):
   "打印任何傳入的參數"
   print "輸出: "
   print arg1
   for var in vartuple:
      print var
   return;
 
# 調用printinfo 函數
printinfo( 10 );
printinfo( 70, 60, 50 );

以上實例輸出結果:

輸出:
10
輸出:
70
60
50

匿名函數

python 使用 lambda 來創建匿名函數。

  • lambda只是一個表達式,函數體比def簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間裏的參數。
  • 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不占用棧內存從而增加運行效率。

語法

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

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

如下實例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數說明
sum = lambda arg1, arg2: arg1 + arg2;
 
# 調用sum函數
print "相加後的值為 : ", sum( 10, 20 )
print "相加後的值為 : ", sum( 20, 20 )

以上實例輸出結果:

相加後的值為 :  30
相加後的值為 :  40

return 語句

return語句[表達式]退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。之前的例子都沒有示範如何返回數值,下例便告訴你怎麽做:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數說明
def sum( arg1, arg2 ):
   # 返回2個參數的和."
   total = arg1 + arg2
   print "函數內 : ", total
   return total;
 
# 調用sum函數
total = sum( 10, 20 );

以上實例輸出結果:

函數內 :  30

變量作用域

一個程序的所有的變量並不是在哪個位置都可以訪問的。訪問權限決定於這個變量是在哪裏賦值的。

變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域如下:

  • 全局變量
  • 局部變量

全局變量和局部變量

定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。

局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。如下實例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

total = 0; # 這是一個全局變量
# 可寫函數說明
def sum( arg1, arg2 ):
   #返回2個參數的和."
   total = arg1 + arg2; # total在這裏是局部變量.
   print "函數內是局部變量 : ", total
   return total;
 
#調用sum函數
sum( 10, 20 );
print "函數外是全局變量 : ", total 
技術分享

 

Python 函數(二)