#函数定义 def mylen(): #def 关键字,定义函数, 空格 函数名(变量) """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函数调用 mylen()
函数是以功能为导向,函数内部尽量不要有print
return:
1.结束
def my_len(): print(1111) print(222) return print(333) my_len() #输出: 1111 222 #遇到return,此函数结束,不在向下执行
2.return返回值
①不写return 返回 None
②return None 返回 None
③return 单个值 返回此单个值
④return 多个值 将多个值包在元组中,返回给调用者此元组
③
def my_len(): l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] count = 0 for i in l1: count += 1 return count #返回单个值,count ret = my_len() #然后调用 赋值到ret上 print(ret) #输出:9
④ def my_len(): l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] count = 0 for i in l1: count += 1 return 1,2,[123,2] #多个值包在元组中 ret1,ret2,ret3 = my_len() # (1,2,[123,2]),元组给单个变量分别赋值 print(ret1,ret2,ret3) #输出:1 2 [123, 2]
参数:
l1=[1,2,3,4,5,6,7] def my_len(x): #形参:形式参数 count = 0 for i in x: count += 1 return count ret = my_len(l1) # 实参:实际参数 print(ret)
传参:
1.从实参的角度:
①按位置传参
def max(x,y):
z = x if x > y else y
return z
ret = max(100,200) #按位置:x对应100,y对应200
print(ret)
#参数必须一一对应
②按关键字传参
def func(x,y): z = x if x > y else y return z s = func(y = 2,x = 3) #关键字传参 print(s)
③混合传参 关键字参数永远在位置参数后面
def func(x,y): z = x if x > y else y return z s = func(2,y= 3) #混合传参,关键字参数永远在位置参数后面 print(s)
2. 从形参角度:
①位置参数
②默认参数
def func(name,sex='男'): #sex默认的值是“男” with open('name_list','a',encoding='utf-8') as f1: f1.write('{} {} '.format(name,sex)) while True: name = input('请输入名字:') if '姐' in name: sex = input('请输入性别:') func(name,sex) # 混合 else: func(name)
③动态参数
*
def func(*args): print(args,type(args)) func(1,2,'alex',3,4,5,6,8,4,7,2) #输出:(1, 2, 'alex', 3, 4, 5, 6, 8, 4, 7, 2) <class 'tuple'> #按位置,接收所有,输出元组
----------------------------
def func(a,b,c,*args):
print(a)
print(b)
print(c)
print(args)
func(1,2,'alex',3,4,5,6,7,8)
#输出:
1
2
alex
(3, 4, 5, 6, 7, 8) *args接收剩余所有,以元组形式
**
def func(a,b,**kwargs): print(a) print(b) print(kwargs,type(kwargs)) func(a=1,b=2,c=3,d=4,e=5) #输出: 1 2 {'c': 3, 'd': 4, 'e': 5} <class 'dict'> #接收所有按关键字传的参数,然后以字典形式表现出来
万能参数:
def func2(*args,**kwargs): print(args) print(kwargs) func2(1,2,3,5,name='alex',age=56) #输出: (1, 2, 3, 5) # {'name': 'alex', 'age': 56} #接收所有参数 按位置 以元组展现, 按关键字 以字典形式展现
魔法运算:
①*
def func(*args): print(args) s = "12345" #输出:('1', '2', '3', '4', '5') ------------------------------------ def func2(*args): print(args) l1 = [1,2,3,] l2 = [1,2,3,2,3,100,2] func2(*l2,*l1) #输出:(1, 2, 3, 2, 3, 100, 2, 1, 2, 3) #加* 打散,加入新的元组里,两个列表写在一起,就把所有的放在一个元组里
②**
def func3(**kwargs): print(kwargs) dic = {'name1':'alex','age1':12} dic2 = {'name2':'jin','age2':22} func3(**dic,**dic2,name3 = 'wusir') #输出:{'name1': 'alex', 'age1': 12, 'name2': 'jin', 'age2': 22, 'name3': 'wusir'} #把所有字典以键值对的形式打散,加入到一个字典
形参的接收顺序:
位置参数、*args、默认、**kwargs