1. 程式人生 > >Python基礎:Python函數

Python基礎:Python函數

python函數 傳遞參數 函數定義 函數調用

一、函數是python中使用最高的對象。

函數定義的簡單規則 :

1、用def定義,接著是函數名和參數和冒號,格式:

2、函數內部代碼塊需要縮進

3、使用return返回函數值,默認返回值是None

格式:

def 函數名(參數) :

代碼塊

return #可有可無,也可以在代碼塊任意位置使用


二、函數中return的使用:

return可以在函數的任何地方使用,直接跳出當前函數,忽略其它代碼塊。

# return也可以不帶參數,返回的是None

# 也可以沒有return,返回的也是None

# return也可以返回字典,列表,函數(裝飾器就是返回的函數代碼塊)。


1、可以跳出if,while,for等語句

def use_return():
    i = 0
    while True:
        i += 1
        for j in range(i):
            print(j, end='')
            
            if j == 5:
                return j
            
        print()

use_return() 

# 運行結果:i等於5時會直接結束函數
"""
0
01
012
0123
01234
012345
"""

上面的函數改變一下調用方式:

print(use_return())            # 最後一行0123455,最後一個5就是返回函數的值,也就是j的值。嘗試把最後一個5換行。

2、調用函數:

使用函數名和括號調用函數。不帶括號調用的是函數體,相當於起個別名。

# 使用上面的例子
# 調用1
if use_return() == 5:
    print(5)

# 調用2
for i in range(0,use_return()):                
    print(i)
#不能使用,因為use_return()返回的是數字,但不是int型,必須先賦值給變量,然後調用變量
v = use_return()
for i in range(0,v):                
    print(i)
    
# 調用3
s = use_return()
print(s)

# 調用函數體
func = use_return
print(func)                        # 打印的是use_return函數所在的內存地址
func()                             # 運行use_return函數

三、函數變量與外部變量的關系:

1、可更改(mutable)與不可更改(immutable)對象

strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。

2、不可變類型:

# 變量賦值 a=5 後再賦值 a=10,不是a的值變了,變量相當於指針,只是指針指向變了,5本身沒有改變,指向的10是一個新地址,而不是把5變成10.

# 不可變類型傳入函數內,函數修改後,不會影響外部變量值。

3、可變類型:

# 變量賦值 la=[1,2,3,4] 後再賦值 la[2]=5 ,雖然la指向的內存地址沒變,但是內部的值變了,所以是可變的。

# 可變類型傳入函數內的是la的本身,所以,在函數內修改la[2],也改變了函數外的la[2]

def modify_la2(la_value):
    la_value[2] = 99999

la = [0, 1, 2, 3, 4, 5]
modify_la2(la)
print('la = %s' % la)
# 運行結果
la = [0, 1, 99999, 3, 4, 5]

4、函數變量尋找由最內層向外層找

def modify_la2():
    la[2] = 99999

la = [0, 1, 2, 3, 4, 5]
modify_la2()
print('la = %s' % la)
#modify_la2找不到la,則找函數外面的la,la必須寫在調用的modify_la2()前面


五、函數的參數傳遞形式:

1、必需參數:調用函數時,按變量的順序寫對應的值

2、關鍵字參數:調用函數時,使用變量名賦值,變量=值

3、默認參數:定義函數時參數帶值,def user(name, age=20): ,age=20就是默認參數

4、不定長參數:

# (*args)不定長參數,只能接收必須參數,把參數轉換成list存儲

#(**kwargs)不定長參數,只能接收關鍵字參數,並把參數轉換成詞典存儲

5、參數存在的順序:

必需參數,默認參數,*args, **kwargs

def modify_la2(name, age=20, *args, **kwargs):

#age默認參數不起作用,必須被賦值。

def modify_la2(name, age=20, *args, **kwargs):
    print('name=', name)
    print('age=', age)
    print('args=', args)
    print('kwargs=', kwargs)

modify_la2('dage', 'men',175, skill='pain', father='Adw')
# 運行結果
name= dage
age= men
args= (175,)
kwargs= {'father': 'Adw', 'skill': 'pain'}


六、匿名函數lambda

lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。

lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間裏的參數。


格式:

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

#梯形面積公式:
resault = lambda x1, x2, h: (x1 + x2)*h/2

print(resault(1, 2, 4))


Python基礎:Python函數