1. 程式人生 > >Python學習之路---Python函式

Python學習之路---Python函式

Python函式

函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。函式能提高應用的模組性,和程式碼的重複利用率。

定義一個函式

你可以定義一個由自己想要功能的函式,以下是簡單的規則:
    函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號()。
    任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。
    函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
    函式內容以冒號起始,並且縮排。
    return [表示式] 結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None。

語法:

def functionname( parameters ):
   "函式_文件字串"
   function_suite
   return [expression]

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

例項

def printn(str):
    print str
    return

函式呼叫

定義一個函式只給了函式一個名稱,指定了函式裡包含的引數,和程式碼塊結構。
這個函式的基本結構完成以後,你可以通過另一個函式呼叫執行,也可以直接從Python提示符執行。

#-*- coding:utf-8 -*-
#函式定義 def printn(str): print str return #函式呼叫 printn('時間')

輸出結果:

時間

引數傳遞

在Python中,型別是屬於物件的,變數是沒有型別的:

a = [1,2,3]
a = "abc"

[1,2,3]是List型別,“abc”是String型別,而變數a是沒有型別的 ,a僅僅是一個物件的引用,可以是List型別物件,也可以是String型別物件

引數

  • 必備引數
  • 關鍵字引數
  • 預設引數
  • 不定長引數

必備引數:
必備引數必須以正確的順序傳入函式,呼叫時的數量必須和宣告時的一樣,不然會出現語法錯誤。

def printm(str):
    print(str)
    return
printm()
#printm(str="A")

輸出結果:

TypeError: printm() missing 1 required positional argument: 'str'

關鍵字引數:
關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。
使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 Python 直譯器能夠用引數名匹配引數值。

def printm(str):
    print(str)
    return
printm(str="A")

輸出結果:

A

預設引數:呼叫函式時,預設引數的值如果沒有傳入,則被認為是預設值。

#_*_coding:utf-8_*_
def printinfo(name,age=12):
    print("name:", name)
    print("age:", age)
    return
printinfo("mini")

輸出結果:

name: mini
age: 12

不定長引數:我們可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數。

def printinfo(name,*var):
    print("name:", name)
    for i in var:
        print(i)
    return
printinfo("mini",1,2,3)

加了星號(*)的變數名會存放所有未命名的變數引數。選擇不多傳引數也可。
輸出結果:

name: mini
1
2
3

匿名函式:

python 使用 lambda 來建立匿名函式。

  • lambda只是一個表示式,函式體比def簡單很多。
  • ambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
  • lambda函式擁有自己的名稱空間,且不能訪問自有引數列表之外或全域性名稱空間裡的引數。
  • 雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行.

語法:

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

如下例項:

#_*_coding:utf-8_*_
#函式說明
sum = lambda arg1,arg2:arg1+arg2
#呼叫sum函式
print("相加的值為:", sum(10,29))

例項輸出結果:

相加的值為: 39

return語句:

return語句[表示式]退出函式,選擇性地向呼叫方返回一個表示式。不帶引數值的return語句返回None。

#_*_coding:utf-8_*_
def sum(a1,a2):
    total = a1+a2
    print("函式內:",total)
    return total
#呼叫sum函式
total = sum(1,2)

例項輸出結果:

函式內: 3

變數作用域:

一個程式的所有的變數並不是在哪個位置都可以訪問的。訪問許可權決定於這個變數是在哪裡賦值的。
變數的作用域決定了在哪一部分程式你可以訪問哪個特定的變數名稱。兩種最基本的變數作用域:全域性變數,區域性變數

全域性變數和區域性變數:

定義在函式內部的變數擁有一個區域性作用域,定義在函式外的擁有全域性作用域。
區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。如下例項:

#_*_coding:utf-8_*_
#函式說明
total = 0 #全域性變數
def sum(a1,a2):
    total = a1+a2
    print("函式內是區域性變數:",total)
    return total
#呼叫sum函式
sum(1,2)
print("函式外是全域性變數:",total)

例項輸出結果:

函式內是區域性變數: 3
函式外是全域性變數: 0