1. 程式人生 > 其它 >【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))

七、小結:

函式是完成某一個功能的程式碼集合。
函式名和變數名一樣,都是指向記憶體的地址,而指向的記憶體儲存就是函式的程式碼。
函式名()則是呼叫函式返回結果;只有函式名沒有括號,呼叫的是函式本身。

沒有return定義返回,預設返回None。
把某一功能定義成函式,重複呼叫減少程式碼量。
定義函式也可以達到批量修改的效果,只修改函式,所有呼叫都發生改變。
函式是python中使用最高的物件。