目录
参考小甲鱼的视频:函数(II)_哔哩哔哩_bilibili
仅作为学习记录
位置参数
说人话就是你函数的实参要跟形参的位置一一对应
下面这个实例是视频中的例子,函数的目的就是使输入的三个字符串中的前后两个字符串调换位置
视频中使用的是ide shell,我使用的是Pycharm
注意join函数只允许一个参数,这里用了一个序列
# 位置参数
def myfunc(a, b, c):
print ("".join((c, b, a)))
myfunc("我","真","帅")
结果:
帅真我
def myfunc(a, b, c):
print ("".join((c, b, a)))
myfunc("帅","真","我")
我真帅
注意这两次myfunc()函数给的实参是不一样的
第一次调用时是a = "我",b = "真",c = "帅"
第二次调用时是a = "帅",b = "真",c = "我"
而这两次实参传入位置的不同,导致函数输出结果也不一样
在调用myfunc()函数时,每一个形参跟实参在位置上都是一一对应的赋值(或者叫实例化?俺不专业,能懂就行)
关键字参数
这玩意就牛逼了,定点爆破,看例子
def myfunc(a, b, c):
print ("".join((c, b, a)))
myfunc(b = "真",c = "我" ,a = "帅")
我真帅
你看这玩意实参位置随便怎么放,函数输出结果都是一样的
位置参数跟关键字参数混用的注意事项
这玩意可以混用,但是没有特殊格式规定,一般要求
位置参数在关键字参数之前
看栗子
myfunc("帅", c = "我", b = "真") # 这是对滴# myfunc(a = "帅", "我", b = "真") # 这是错滴
默认参数
默认参数,我的话来说就是,正常情况下,没有调用的函数就像一个人的空壳,你要调用这个函数时,你要重新赋予它眼睛鼻子·耳朵嘴巴四肢躯干心脏等,而一个有默认参数的函数就像你给这个人的空壳赋予了眼睛鼻子嘴巴,而在你要调用时,你就只需要再赋予它心脏四肢躯干,但是你如果觉得你之前赋予的鼻子丑的话,你再重新赋予一个鼻子给它(doge)
def myfunc(a, b, c = "我"):
print ("".join((c, b, a)))
myfunc("帅" , "真") # 完全O der K
myfunc("帅" , "真" ,"你也") # also完全O der K
我真帅
你也真帅
/ *
这玩意说实话属于比较细腻的知识点了
/ 就是/左侧的参数必须是位置参数,不能是关键字参数
* 就是*右侧的参数必须是关键字参数,不能是位置参数,而对左侧的参数没有要求
def myfunc1(a, b, *, c):
print ("".join((c, b, a)))
myfunc1("帅","真" ,c = "帅")
# myfunc1("帅", "我", "真") # 第三个必须为关键字参数
奶奶滴,python3.7不支持 / 的操作
收集参数
定义方法:在形参前面加一个*号就行
# 收集参数
def myfunc(*args):
print("有{}个参数".format(len(args)))
print("第2个参数是:{}".format(args[1]))
print(type(args))
myfunc(1,2,3,4)
myfunc(2,"Hi",4.05)
有4个参数
第2个参数是:2
<class 'tuple'>
有3个参数
第2个参数是:Hi
<class 'tuple'>
使用*args引用收集参数,得到的args是一个tuple,就是python将args的内容打包成了一个tuple
敲累了不想打字了 ,寄基看叭
def myfunc(*args, a, b):
print("有{}个参数".format(len(args)))
print("第2个参数是:{}".format(args[1]))
print(type(args))
myfunc(1,2,3,4,a=5,b=6)
myfunc(2,3,b = "Hi",a = 4.05)
有4个参数
第2个参数是:2
<class 'tuple'>
有2个参数
第2个参数是:3
<class 'tuple'>
注意后面两个形参要用关键字参数来传递实参,不然前面的收集参数一直包含后面的内容的
收集参数也可以将多个参数打包为字典,看栗子
def myfunc(**kwargs):
print(kwargs)
myfunc(a=1,b=2,c=3,d=4) # 必须用关键字参数
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
由于字典都是一个个的键值对,所以传递实参时要用关键字参数
解包参数
这个玩意有点像pycharm里的ctrl+/,用一次是注释,再用一次就是取消注释
在前面的收集参数中,*args是对多个参数进行打包,这个*是放在形参里面的,而当一个数据打包后,也可以使用*来解包滴
看理智
args = (1,2,3,4)
def myfunc(a ,b ,c, d):
print(a, b, c, d)
myfunc(*args) # 把一个tuple里的(1,2,3,4)解包成1,2,3,4四个参数
1 2 3 4
字典解包一样的 **args