1. 程式人生 > >python基礎學習11----函數

python基礎學習11----函數

enc 局部作用域 語句 基礎 變量 each 不可變 不可 lis

一.函數的定義

def 函數名(參數列表):
    函數體
    return語句

return語句不寫或後邊不加任何對象即為return None

二.函數的參數

無參數

def func1():
    print("沒有參數")

一個參數

def func1(a):
   return a

多個參數

def func1(a,b,c):
   return a+b+c

必須參數

  必須按照正確順序和數量傳入參數

def func1(name,age,job):
   print("name:%s age:%d job:%s"%(name,age,job))
func1("sfencs",20,"IT")

關鍵字參數

def func1(name,age,job):
   print("name:%s age:%d job:%s"%(name,age,job))
func1(age=20,name="sfencs",job="IT")

默認參數

默認參數必須放在必須參數的後面

def func1(name,age,job="IT"):
   print("name:%s age:%d job:%s"%(name,age,job))
func1("sfencs",20)
func1("Alan",25,"teacher")

不定長參數

參數帶一個星號*

def func1(*args):
    print(args)
func1(1,2,3,"sfencs")#(1, 2, 3, ‘sfencs‘)以元組形式保存

參數帶兩個星號**

def func1(**args):
    print(args)
func1(age=20,name="sfencs",job="IT")#{‘age‘: 20, ‘name‘: ‘sfencs‘, ‘job‘: ‘IT‘}以字典形式保存

定義函數的參數時請以必須參數、默認參數、帶一個星號的不定長參數、帶兩個星號的不定長參數的順序定義形參

三.參數傳遞

不可變類型

def func1(a):
    a=5
b=10
func1(b)
print(b)#輸出為10

可變類型

def func1(list1):
    list1.append("sfencs")
list2=[1,2,3]
func1(list2)
print(list2)#[1, 2, 3, ‘sfencs‘]list2會改變

四.變量作用域

L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內建作用域

按照L-->E-->G-->B的順序查找

內部作用域修改外部作用域變量

global

count=20
def function() :
    global count#不加這句話會報錯
    print (count)#20
    count=5
    print(count)#5
function()
print(count)#5

nonlocal 

修改嵌套作用域

def function1() :
    count=20
    def function2():
        nonlocal count
        count=5
        print(count)#5
    function2()
    print(count)#r此時輸出為5,若不加nonlocal count則輸出為20
function1()

五.遞歸函數

#斐波那契數列為0,1,1,2,3,5,8,13,21,34.......
def fibon(n):
    if n<=2 :
        return n-1
    return fibon(n-1)+fibon(n-2)
print(fibon(7))#輸出數列中第七個數,為8

  

python基礎學習11----函數