◎知识点
函数的定义之带默认的的形参
函数的定义之使用*定义关键字形参
◎脚本练习
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@FileName: function_arguments2.py
@Function: python function arguments
@Author: Zhihe An
@Site: https://chegva.com
@Time: 2021/7/4
"""
"""一、函数的定义之带默认值的形参"""
"""
定义函数时,可以给形参设置默认值,这样,调用函数时如果不传递对应的实参,就会使用设置的默认值初始化形参
给形参设置默认值的语法格式为:形参 = 默认值
给形参设置默认值之后,可以简化函数的调用,只有与默认值不符的形参才需要传递额外的实参
"""
def f1(a, b = 5):
print('a =', a, 'b =', b)
f1(2, 6) # a = 2 b = 6
f1(2) # a = 2 b = 5
def f2(a, b = 5, c = 8):
print('a =', a, 'b =', b, 'c =', c)
f2(2, 6, 9) # a = 2 b = 6 c = 9
f2(2) # a = 2 b = 5 c = 8
f2(2, 6) # a = 2 b = 6 c = 8
f2(2, c = 9)# a = 2 b = 5 c = 9
"""
定义函数时,没有设置默认值的形参必须位于设置了默认值的形参之前。否则,无法根据位置来匹配
位置实参和对应的形参
"""
# def f(b = 5, a):
# print('a =', a, 'b =', b) # SyntaxError: non-default argument follows default argument
# 假设上面的定义是合法的,对于调用f(2),你可能想把实参2传递给形参a,但是实参2是位置实参,
# 因此,实参2会传递给形参b,从而导致形参a存在实参缺失
"""
当函数有多个形参时,把变化大的形参放在前面,把变化小的形参放在后面,变化小的形参就可以设置默认值
"""
"""
给形参设置默认值之后,调用函数时就存在多种调用方式
"""
def fun(a, b = 5):
print('a =', a, 'b =', b)
fun(3) # a = 3 b = 5
fun(a = 3) # a = 3 b = 5
fun(3, 6) # a = 3 b = 6
fun(a = 3, b = 6) # a = 3 b = 6
fun(b = 3, a = 6) # a = 3 b = 6
fun(3, b = 6) # a = 3 b = 6
"""
定义函数时,给形参设置的默认值就被计算出来了。因此,如果给形参设置的默认值是可变类型的对象,
并且前一次调用函数时在函数体内修改了形参的默认值,那么修改后的值将作为下一次调用函数时形参的默认值
"""
def fun1(L = []):
L.append(18)
print(L)
fun1() # [18]
fun1() # [18, 18]
fun1() # [18, 18, 18]
"""
不要把形参的默认值设置为可变类型的对象
"""
def fun2(L = None):
if L is None:
L = []
L.append(18)
print(L)
fun2() # [18]
fun2() # [18]
fun2() # [18]
"""二、函数的定义之使用*定义关键字形参"""
"""
定义函数时,可以在所有形参的某个位置添加一个*,这样,*后面的所有形参都被定义为
只能接收关键字实参的关键字形参
"""
def f(a, b, *, c, d):
print('a =', a, 'b =', b, 'c =', c, 'd =', d)
f(1, 2, c = 3, d = 4) # a = 1 b = 2 c = 3 d = 4
# f(1, 2, 3, 4) # f() takes 2 positional arguments but 4 were given▽ 调用函数的多种方式
▽ 使用*定义关键字形参
◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_basic/function_arguments2.py
