31.函数的参数

李光朱课程 2024-04-11 23:29:01
缺省参数引入

缺省参数也叫做默认参数,是指定义函数时形参变量有默认值,如果调用函数时没有传递参数,那么函数就用默认值,如果传递了参数就用传递的那个数据。

示例:

def print_info(name, age=35): print(f'name: {name}') print(f'age: {age}')print_info('伍佰')print_info('伍佰', 18)

缺省参数的作用

当调用函数时,有些参数不必传递,而是用默认值,这样的场景往往都用缺省参数

例如,一个学校现在开始检查每个学生的信息,学生说:报告老师我是xxx学校xxx系xxx年级xxx班学生,名字叫xxxx,大家想只要是这学校的学生那么“xxx学校”就可以省略不用说了,因为大家都知道。所以就可以认为默认的学校就是xxx,而当其他学校的学生介绍时yyy学校名字案例说就一定要说清楚,否则让人弄混了。

示例:

def print_info(name,_name, grade, department_name, school_name="XX学院"): print("老师好:我是来自 %s(大学) %s系 %s年级 %s班级 的学生,我叫%s" % ( school_name, department_name, grade, _name, name ))print_info("伍佰", "爬虫", "二", "软件工程")print_info("伍佰", "爬虫", "二", "软件工程", "python")

注意点缺省参数只能在形参的最后(即最后侧)缺省参数全挨在一起(在右侧),不是缺省参数挨在一起(在左侧)>>> def printinfo(name, age=35, sex):... print name...File "<stdin>", line 1SyntaxError: non-default argument follows default argument命名参数引入

命名参数是指:在调用函数时,传递的实参带有名字,这样的参数叫做命名参数

示例:

def test(a, b): print('-----') print(f'a={a}') print(f'b={b}')test(11, 22)test(a=11, b=22)test(a=22, b=11) # 根据名称将值传入到指定的变量中命名参数的作用

命名参数能够在调用函数的时候,不受位置的影响,可以给需要的参数指定传递数据

注意点命名参数的名字要与形参中的名字相同,不能出现命名参数名字叫做num,而形参中没有变量num如果形参左侧有普通的形参,调用函数时传递的参数一定要先满足这些形参,然后再根据需要编写命名参数def test(a, b, c=100, d=200): print("a=%d, b=%d, c=%d, d=%d" % (a, b, c, d))# 下面的方式都成功test(11, 22)test(11, 22, 33)test(11, 22, 33, 44)test(11, 22, d=33, c=44)# 下面的方式都失败test(c=1, d=2) # 缺少a、b的值test(c=1, d=2, 11, 22) # 11, 22应该在左侧不定长参数引入

不定长参数:定义函数的时候形参可以不确定到底多少个,这样的参数就叫做不定长参数

不定长参数有2种方式表示

*args :表示调用函数时多余的未命名参数都会以元组的方式存储到args中**kwargs:表示调用函数时多余的命名参数都会以键值对的方式存储到kwargs中

注意:

*和**是必须要写的,否则就变成了普通的形参了当我们说不定长参数的时候,就是指*args和**kwargs

示例:

def test(a, b, *args, **kwargs): print(a, type(a)) print(b, type(b)) print(args, type(args)) print(kwargs, type(kwargs))test(11, 22, 33, 44, 55, 66, name='伍佰', address='台湾')不定长参数的作用

通过不定长参数,能够实现调用函数时传递实参个数可以随意变换的需求

注意点加了星号*的变量args会存放所有未命名的变量参数,args为元组而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典一般情况下*args、**kwargs会在形参的最右侧args与kwargs的名字可以变,例如叫*aa,**bb都是可以,但一般为了能够让其他的开发者快速读懂我们的代码最好还是不改特殊情况

缺省参数在*args的后面

def sum_nums_3(a, *args, b=22, c=33, **kwargs): print(a) print(b) print(c) print(args) print(kwargs)sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)

说明:

*args后可以有缺省参数,想要给这些缺省参数在调用时传递参数,需要用命名参数传递,否则多余的未命名参数都会给args如果有**kwargs的话,**kwargs必须是最后的

输出结果:

10012(200, 300, 400, 500, 600, 700){'mm': 800, 'nn': 900}

0 阅读:1

李光朱课程

简介:感谢大家的关注