Python-函数
一、基本概念
注:关键字参数在位置参数之后
例如:func(1,2,z=3)
二、默认参数(形参)
或者
或者【y指向a的内存地址】
- Python里面所有的值的传递,都是内存地址的传递,内存地址是对值的引用
- Python里面所有的值的传递,都是引用传递
上图:运用None的知识点,解决了默认形参的值不能设置成可变类型
注:在python中None不是一个保留关键字,只是NoneType对象的一个实例。空就是空,它不是整型,不是浮点型,也不是字符串,就是一个NoneType。
三、可变长度参数
1、可变长度的位置参数
# 可变长度的参数: 在调用函数的时候,传入的实参的个数是不固定的
# 可变长度的位置参数
# 用法:*形参名
def func(x,y,*z): # 存成元组
print(x,y,z)
func(1,2,3,4,5,6)
# 实际运用 ,如:求和功能
def func1(*x):
sum=0
for i in x:
sum =sum +i
print(sum)
func1(1,2,3,4,5,6,7,8,9)
这里是运行结果
1 2 (3, 4, 5, 6)
45
2、可变长度的关键字参数
1、形参:
# 可变长度的关键字参数
# 用法:**kwargs
def func(x, y, **kwargs): # 存为字典
print(x, y, kwargs)
func(1, y=7, name='火娃', b='水娃', c=0)
这里是运行结果
1 7 {‘name’: ‘火娃’, ‘b’: ‘水娃’, ‘c’: 0}
2、实参
1、 单个*号
def func(x, y, z):
print(x, y, z)
func(*[1, 2, 3]) # 加 *表示func(1,2,3)
# *在实参中有打散的作用,元组,列表,字符串均可被打散
# 或者
l=[1,2,3]
func(*l)
这里是运行结果:
1 2 3
2、双*号
def func(x, y, z):
print(x, y, z)
func(*{'x': 1, 'y': 2, 'z': 3}) # 字典只用一个*打散,那结果只留一个key
func(**{'x': 1, 'y': 2, 'z': 3}) # 实参打散,** 结果保留value
这里是运行结果:
x y z
1 2 3
3、单双*号混合
def func(x, y, **z): # 形参打包
print(x, y, z)
func(**{'x': 1, 'y': 2, 'z': 3})
这里是运行结果:
1 2 {‘z’: 3}
例子:
def func(*args, **kwargs):
print(args)
print(kwargs)
func(1, 4, 5, 's', 'd', e=7, a=9)
这里是运行结果:
(1, 4, 5, ‘s’, ‘d’)
{‘e’: 7, ‘a’: 9}
总结:运用到形参中是打包,运用到实参中实打散的作用*
def func1(x, y, z):
print('func1>>>', x, y, z)
def func2(*args, **kwargs): # 形参-打包
func1(*args, **kwargs) # 实参-打散,** 结果仅保留value,*结果仅保留key
print('args>>>', args)
print('kwargs>>>', kwargs)
func2(1, 2, 3)
func2(1, 2, z=3)
这里是运行结果:
func1>>> 1 2 3
args>>> (1, 2, 3)
kwargs>>> {}
func1>>> 1 2 3
args>>> (1, 2)
kwargs>>> {‘z’: 3}