学习视频: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)#实参部分可以打散