python學習-day8(函數的定義,參數,動態參數)

學習視頻:https://www.bilibili.com/video/BV1SE411N7Hi?p=53
以下內容僅供個人學習使用,侵刪

'''
函數的定義

作用
1.減少重複代碼
2.提高重用性

函數執行完,函數體中開闢的空間自動自動銷燬
返回的內容,還可以繼續使用;顯示的內容就不能繼續使用了
'''

def len():

    count=0
    for i in s:
        count+=1
    print(count)
s="alex"
len()

'''
1.用函數,實現一個三次登錄功能(return能夠終止函數)
2.在info文件追蹤存儲賬號和密碼,例如"alex:alex123"
3.獲取用戶輸入的賬號和密碼進行判斷,如果登錄成功,返回登錄成功,否則重新輸入,三次後終止函數'''

def login():
    with open("day7_login.txt","r",encoding="utf-8")as f:#打開文件只需要一次
        for i in range(3):#滿足三次登錄
            f.seek(0)
            username = input("username:")
            password = input("password:")
            for i in f:#獲取文件中的所有內容
                a,b=i.strip().split(":")#防止最後的\n換行符,導致賬號密碼匹配不上
                if username==a and password==b:
                    return "登錄成功"
            else:
                print("賬號密碼錯誤,請重新輸入")

ret=login()
if ret:#
    print(ret)
#return不寫的時候返回none
# return能夠返回python中所有的對象,python中一切皆爲對象
# return能夠返回多個內容,以元組形式顯示\
#return 下方代碼不會被執行

#函數的應用:用戶名,密碼的加密保存
user=input("user:")
pwd=input("pwd:")

def add_pwd():
    '''
    加密
    登錄時要用,保存時要用
    :return:
    '''
    return pwd+123#給密碼加工,加工後是讀不懂的

def insert_pwd():
    ret=add_pwd()
    print(user,ret)

def check():
    pwd=add_pwd()
insert_pwd()

'''
參數:

形參:在函數定義
    位置參數:必須一一對應
        def func(a,b)
    默認參數
        def func(a=1,b=2)
    混合參數:位置和關鍵字一起使用
        def func(a,b=1)
實參:在函數調用
    位置參數
        func(10,20)
    關鍵字參數
        func(a=10,b=20)
    混合參數
        func(10,b=20)

參數優先級:
    位置參數>默認(關鍵字)>

'''
def car(app,addr,car_fu,car_info,car_plate):#形參
    print("掏出手機")
    print("打開",app)
    print("設置",addr)
    print("立即呼叫")
    return f"{car_fu},{car_info},{car_plate}"

ret=car("滴滴","北京","劉師傅","天子駕1","浙B400")
print("等待",ret)

# 三元運算
# 條件成立的結果  條件判斷  條件不成立的結果
# 1               if 3<2       2
# print(1 if 3<2 else 2)
# 等同於
# if 3<2:
#     print(1)
# else:
#     print(2)

def func(a,b):#func(a,b=10)b是默認參數
    return a if a>b else b
ret=func(10,20)#ret=func(10,b=20)在實參的角度,這個是混合參數
#----------------------
# def func(a,b=10):
#     return a if a > b else b
# ret = func(10, 20)#當b不給參數時,默認用10,給了參數20,就把20給b
# -------------------------
print(ret)

# open(file="info",mode="r",encoding="utf-8") 實參:關鍵字
# open("info","r",encoding="utf-8") 實參:混合



動態參數
def func(*args):#在形參的位置的*是聚合元組 打包,可以接受任意長度的參數
#等同於def func(a,b,c,d,e,f,……)  更方便
    print(args)

func(1,4,5,6,7,8,645,2,34,6,89,3)

'''
*args: 接收多餘的位置參數
**kwargs 接受多餘的關鍵字參數
 args和kwargs是程序員之間約定俗成的,可以更改名字,但是不建議更改
'''

def func(a,b,c,d,**kwargs):
    print(a,b,c,d,kwargs)
func(a=1,b=2,c=3,d=4,e=5,f=6)#得到 1 2 3 4 {'e': 5, 'f': 6}

def func (*args,**kwargs):#萬能傳參,形參部分是聚合
    print(args,kwargs)#函數體中是打散
func(12,4,56,7,87,5454,a=12,b=34,g=345)
#得到(12, 4, 56, 7, 87, 5454) {'a': 12, 'b': 34, 'g': 345}
func (12,4,5,7,67,6,79898,56,57)
#得到(12, 4, 5, 7, 67, 6, 79898, 56, 57) {}

#參數混合
print("----參數混合-----")

def func(a,b,c=1):
    print(a,b,c)
func(12,13)#12,13,1

# def func(*args,a,b,c=1):
#     print(a,b,c)
#func(12,13)#報錯,遇到*args,全部接收,後面a,b沒有

def func(a,b,c=1,*args):
    print(a,b,c,args)
func(12,13)#12 13 1 ()
func(12,13,14)#12 13 14 ()

def func(a,b,*args,c=1,):
    print(a,b,args,c)
func(12,13,14)#12 13 (14,) 1
#func(12,13,14,b=15)#報錯,同一個變量名一次只能賦值一次,同時把13,15給了b
#func(12,13,14,d=15)#報錯沒有d關鍵字

#a,b位置參數,args動態位置參數,c默認參數,kwargs動態關鍵字參數
def func(a,b,*args,c=1,**kwargs):#面試中會有,但是真正開發中不這麼用
    print(a,b,c,args,kwargs)
func(12,13,14,d=15,e=20)#12 13 1 (14,) {'d': 15, 'e': 20}


print("-------擴展--------")
def func (*args,**kwargs):#萬能傳參,形參部分是聚合
    print(args,*args,kwargs)#函數體中args是打散
func (12,4,5,7,67,6,79898,56,57)
#得到 (12, 4, 5, 7, 67, 6, 79898, 56, 57) 12 4 5 7 67 6 79898 56 57 {}

lst=[1,21,32,5,647,78,7,45,547,68,]
dic={"key":1}
func(*lst,**dic)#實參部分可以打散
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章