函数
一. 函数就是为了完成某一个特定的功能
形式参数不占运行空间, 只有传入实参后才占, 用完立刻释放空间.
函数一遇到 return 就结束掉了
函数名 () : 运行函数, 有返回值的话用变量承接
- def test(x): # x 称为形式参数
- #注释函数功能
- x += 1 #代码块
- return x #返回值
例:
- def test(x):
- y = 2 * x + 1
- return y
- a = test(3)
- print(a)
二, 使用函数的好处
1. 代码的重用
2. 保持一致性, 易维护
3. 可扩展性
- def logger():
- '日志功能'
- pass
- def index():
- logger() #调用函数使用日志功能
- print('index')
- def home():
- logger() #调用函数使用日志功能
- print('home')
三, 函数和过程
过程就是没有返回值的函数
没有返回值 (没有写 return), 返回 None
返回一个值, 返回 object
返回多个值 (return 0,1,2,3), 返回 tuple(0,1,2,3)
四, 函数参数:
函数定义时也可以不传入形参, 但要在函数体中给定值
- def test():
- x = 2
- y = x ** 2
- return y
- a = test()
- print(a)
4.1 位置参数
要和形参一一对应, 缺一不可, 多一也不可
- def test(x, y, z):
- print(x)
- print(y)
- print(z)
- test(1, 2, 3)
4.2 关键字参数
位置无需固定, 缺一不行, 多一也不行
- def test(x, y, z):
- print(x)
- print(y)
- print(z)
- test(y = 1, x = 3, z = 2)
若混合使用, 位置参数必须在关键字参数的左边
- test(1, y = 2, 3) #报错
- test(1, 3, z = 2, y = 4) #报错, y 只能传一个值
- test(1, 3, z = 2) #正确
4.3 默认参数
- def test(x, type = 'dabai'):
- print(x)
- print(type)
- test(1)
- test(1, '唉') # 传入的实参会覆盖默认参数
五, 参数组 (非固定长度的参数) * 列表 ** 字典
*args 把位置参数处理成列表的形式
- def test(x, *args):
- print(x)
- print(args)
- print(args[0])
- test(1, 2, 3, 4, 5)
开发的时候, 预留一个 *args 用来以后扩展时用, 可以先不传入参数, 不会报错
传入列表和字典时, 把列表和字典当成一个整体作为了元组的第一个元素
- def test(x, *args):
- print(x)
- print(args)
- test(1, {'name': 'dabai'})
- test(1, [2,3,5,6,7])
如果想把列表中的每一个元素都作为参数传给 args 则用 *args
- def test(x, *args):
- print(x)
- print(args)
- test(1, *[2,3,5,6,7])
若是处理多个关键字参数, 用 **kwargs
- def test(x, **kwargs):
- print(x)
- print(kwargs)
- test(1, y = 2, z = 3)
混合使用
- def test(x, *args, **kwargs):
- print(x)
- print(args, args[1])
- print(kwargs, kwargs.get('z'))
- test(1, 1, 2, 3, 4, 5, y=2, z=3)
- def test(x, *args, **kwargs):
- print(x)
- print(args, args[1])
- print(kwargs, kwargs.get('z'))
- test(1, *[1,2,3,4], **{'z': 1, 'y': 3})
来源: http://www.bubuko.com/infodetail-3093201.html