#收集参数
'''
收集参数:
(1)普通收集参数
(2)关键字收集参数
'''
#(1)普通收集参数(可变参数)
'''
语法:
def func(*参数)
pass
参数前面加上一个*的就是普通收集参数:
普通收集参数专门用于收集多余的,没有人要的普通实参,形成一个元组
def func(a,b,c,*arg):
print(a,b,c)#1,2,3
print(arg)#()
func(1,2,3,4,5,6)
arg===>argument 参数
'''
#计算任意长度的累加和
#函数的定义处
def mysum(*arg):
total = 0
print(arg)
for i in arg:
total+=i
print(total)
mysum(1,5,7,1000)
#(2)关键字收集参数
'''
#语法
def func(**参数):
pass
参数前面加上**的就是关键字收集参数
关键字收集参数:用于收集多余的,没人要的关键字实参,形成一个字典
def func(a,b,c,**kwargs):
pass
kwargs => keyword关键字 arguments多个参数
def func(a,b,c,**kwargs):
print(a,b,c)
print(kwargs)
func(1,2,3,f=11,d=13,zz=99)
'''
# 打印任意长度的字符
# 班长:黄文
# 班花:陈广耀
def func(**kwargs):
dictvar ={"monitor":"班长","class_flower":"班花"}
strvar1=""
strvar2=""
print(kwargs)
for a,b in kwargs.items():
if a in dictvar:
strvar1+=dictvar[a]+":"+b+"\n"
else:
strvar2+="吃瓜群众:"+b+"\n"
print(strvar1)
print(strvar2)
func(monitor="黄文",class_flower="陈广耀",people1="黄熊大",people2="黄将用")
###命名关键字
'''
#语法:
def func(参数1,参数2,*,参数3,参数4)
pass
(1)在函数的定义处* 号后面的参数就是命名关键字参数
(2)在函数的定义处,普通收集参数和关键字收集参数之间的是命名关键字参数
def func(*arg,命名关键字参数**kwargs)
命名关键字必须使用关键字实参的形式进行调用
'''
#形式一
def func(a,b,*,c):
print(a,b,c)
func(1,2,c=4)
#形式2
'''
如果命名关键字指定了默认值,那么在调用时,
可以不指定实参,默认使用自己的值
'''
def func(a,b,*,c=5):
print(a,b,c)
func(1,2,c=6)
#形式3
def func(*arg,d,**kwargs):
print(arg)
print(kwargs)
print(d)
func(1,2,23,c=1,f=2,d=3)
"""
(4)*和**的魔术用法:打包和解包
*和**,在函数的定义处,负责打包(把实参都收集过来,放在元组或字典中)
*和**,在函数的调用处,负责解包(把容器类型的数据,一个一个拿出来,进行传递)
"""
def func(a,b,c):
print(a,b,c)
listvar = [1,2,3]
# *一般修饰列表更多一些 (负责把列表里面的元素一个一个拿出来的进行函数调用)
func(*listvar) # <==> func(1,2,3)
def func(a,b,c,*,d,e,f):
print(a,b,c)
print(d,e,f)
listvar = [1,2,3]
dic = {"d":4,"e":5,"f":6} # func(d=4,e=5,f=6)
#**一般修饰字典,(负责把字典里面的键值对变成d=4,e=5的形式,进行函数调用)
func(1,2,3,**dic) # <==> d=4 , e = 5 , f = 6
# * 和 ** 的解包操作
func(*listvar,**dic)
#函数参数的默认顺序:
'''
必须按照如下的参数顺序进行定义:
普通形参(位置形参) -> 默认形参 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数
'''
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
#(一)
f1(1,2) #a=1,b=2,c=0 *args=(),kw={}
f1(1,2,c=3)#a=1,b=2,c=3,args=(),kw={}
f1(1,2,3,"a","b")#a=1,b=2,c=3 args=(a,b),kw={}
f1(1,2,3,"a","b",x=99)
f1(1,2,d=99,ext=None)
# f1(1, 2, 3, 'a', 'b', x=99) #a=1,b=2,c=3,args=(a,b),kw={'x':99}
# f2(1, 2, d=99, ext=None) # a=1,b=2,c=0,d=99,kw={'ext':None}
#(二)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw) # a=1,b=2,c=3,args=(4,),kw={"d":99,"x":"#"}
# *args <==> f1(1,2,3,4)
# **kw <==> f1(d=99,x="#")
#(三)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
myargs = (1, 2, 3)
mykw = {'d': 88, 'x': '#'}
f2(*myargs, **mykw) #a=1,b=2,c=3,d=88,kw={"x":"#"}
#(四)
# 定义处
def f1(a, b, c=0, *args,d,**kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
print(d)
# 调用处
f1(1,2,3, 'a', 'b',d=67, x=99,y=77)#a=1,b=2,c=3,args=(a,b) kw={x:99,y:77} d=67
# 普通收集形参 和 关键字收集形参 可以接受到所有种类的参数
# *args,**kwargs 都是可变长参数,参数的长度不限制
def func(*args,**kwargs):
pass
###函数的返回值 return
'''
return:自定义返回值,返回到哪里?返回到函数的[调用处]
1.return 后面可以跟上六大标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return默认返回None
2.return 如果执行了return,意味着 return后面的所有代码,统统不执行,函数终止了
'''
#(1)return后面的数据类型
def func():
# return 1
# return 3.14
# return True
# return 4j
return {"a":1,"b":2}
res =func()#res = {"a":1,"b":2}
print(res)
#(2)如果不写return,默认返回None
def func():
a= 1
res =func()
print(res)
#(3) 执行完return 之后,函数立刻终止,后面的代码不执
def func():
print("执行到1")
print("执行到2")
return 1
print("执行到3")
print("执行到4")
return 2
res = func()
print(res)
#(4) 计算器
print("<===>")
def calc(sign,num1,num2):
if sign == "+":
res = num1 + num2
elif sign == "-":
res = num1 - num2
elif sign == "*":
res = num1 * num2
elif sign == "/":
if num2 == 0:
return "大兄弟,除数不能为0"
res = num1 / num2
else:
return "不会,别问我!!!!!!,你是有趣的灵魂"
return res
res = calc("^",5,0)
print(res)
# print打印的值和返回值是来两个不相干的概念 return+值 自定义的
# res= print(123)
# print(res)