python 函数参数
函数的参数
-
位置参数:调用函数时根据函数定义的参数位置来传递参数。
-
形参和实参的个数和书写位置必修一致
def user_info(name, age, gender): print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}') user_info('TOM', 20, '男')
-
-
缺省参数
-
缺省参数就是默认参数
-
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
def student_name_and_age(name, age='不愿透露'): "设置默认参数" print('姓名:%s 年龄 %s' %(name, age))
-
-
关键字参数
-
特点:形参和实参的书写顺序可以不一致,关键字参数必须书写在位置参数的后面
-
函数调用,通过“键=值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
def user_info(name, age, gender): print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')\ user_info('Rose', age=20, gender='女') user_info('小明', gender='男', age=16)
-
-
可变参数
- 可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
- 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
- 包裹位置传递
def user_info(*args): print(args) #('TOM',) user_info('TOM') #('TOM', 18) user_info('TOM', 18)注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。
- 包裹关键字传递
def user_info(**kwargs): print(kwargs)# {'name': 'TOM', 'age': 18, 'id': 110} user_info(name='TOM', age=18, id=110)传进的所有参数都会被kwargs变量收集,它会根据传进参数的位置合并为一个字典(dict),kwargs是字典类型,这就是包裹关键字传递。
综上:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程。
-
命名关键字参数
- 作用:限制关键字参数的名字
def print_person_info(name, age, *, height, weight): print('我的名字叫:', name, '年龄:', age,'身高', height, '体重', weight)print_person_info('张三', 18, height=180, weight=75)只能传入限制关键字名字的dict
-
参数的组合
- 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
def student_info(name, age=18, *books, **kw): print('我的名字叫:', name, '年龄:', age,'其它信息:',kw) if 'city' in kw: print('来自:', kw['city']) for book in books: print('我有',book,'书')student_info('张三', 18, '语文','数学','计算机', city='北京', height=180, weight=75)def student_info(name, age=18, *books, city, **kw): # 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了: print('我的名字叫:', name, '年龄:', age,'其它信息:',kw) print('来自:', city) for book in books: print('我有',book,'书')student_info('张三', 18, '语文','数学','计算机', city='北京', height=180, weight=75)

浙公网安备 33010602011771号