函數 一、函數的創建 簡單格式 如果沒有寫return,函數會預設返回一個none 二、函數的參數 必需參數: 調用函數時必需參數須以正確的順序傳入,調用的數量必須和聲明時的一樣。 關鍵字參數: 使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。 ...
函數
一、函數的創建
簡單格式
def function_name(參數表): 函數體 return
如果沒有寫return,函數會預設返回一個none
二、函數的參數
必需參數:
調用函數時必需參數須以正確的順序傳入,調用的數量必須和聲明時的一樣。
def func1(name,age):
print('my name is %s,i am %d years old'%(name,age)) func1('smilepup',20) #輸出my name is smilepup,i am 20 years old
關鍵字參數:
使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。
def func1(name,age): print('my name is %s,i am %d years old'%(name,age)) #func1(20,'smilepup')#報錯 func1(age = 20,name = 'smilepup')
預設參數(預設參數):
調用函數時,預設參數的值如果沒有傳入,則被認為是預設值,如果輸入了預設參數了,則傳入輸入的參數。
def print_info(name, age, gender='male'): print('Name:%s' % name) print('age:%s' % age) print('Sex:%s' % sex) return print_info('smilepup', 20)#gender為male print_info('puppy', 2, 'female')#gender為female
不定長參數
當需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,聲明時不會命名。
def func1(*args): print(args) return func1(1,2,3,4) #輸出(1, 2, 3, 4)
args中的數據用元組保存。
用**的變數名可以存放命名的變數參數
def func1(**args): print(args) return func1(name = 'smilepup',age = 20,gender = 'male') #輸出{'name': 'smilepup', 'age': 20, 'gender': 'male'}
而這種則用字典保存數據。
當函數需要傳入不同類型的變數時,要註意順序必需參數、預設參數、帶一個星號的不定長參數、帶兩個星號的不定長參數的順序定義形參,否則會報錯。
三、作用域
L:local,局部作用域,即函數中定義的變數;
E:enclosing,嵌套的父級函數的局部作用域,即包含此函數的上級函數的局部作用域,但不是全局的;
G:globa,全局變數,就是模塊級別定義的變數;
B:built-in,系統固定模塊裡面的變數,比如int, bytearray等。
搜索變數的優先順序順序依次是:作用域局部>外層作用域>當前模塊中的全局>python內置作用域
global關鍵字
當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了,當修改的變數是在全局作用域(global作用域)上的,就要使用global先聲明一下
count = 10 def outer(): global count print(count) count = 100 print(count) outer() #10 #100
四、遞歸函數
定義:在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
斐波那契數列
def fibo(n): before = 0 after = 1 for i in range(n - 1): ret = before + after before = after after = ret return ret