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中使用最高的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章