python 函数的 4 种参数类型
在调用函数时,通常会传递参数,函数内部的代码保持不变,针对 不同的参数处理不同的数据。
有位置传参、关键字传参、默认值参数、多值参数等。
1、参数传递
形参和实参:
- 形参:定义 函数时的 参数变量
- 实参:调用 函数时,使用的参数变量
参数传递的过程,就是 把实参的引用 传递给 形参 ,使用实参的值来执行函数体的过程。
在 Python
中,函数的 实参/返回值 都是是靠 引用 来传递来的
2、位置实参
按照参数位置,依次传递参数,这是最普通的方式。
def location(a, b)
print(a + b)
location(3, 9)
"调用函数时,按顺序传递参数,3 传给 a,9 传给 b"
3、关键字实参
如果不想严格按照顺序传递参数,也可以按关键字传递。
def location(a, b)
print(a + b)
location(b = 3, a = 9)
"调用函数时,按关键字传递参数,3 传给 b,9 传给 a"
4、缺省参数
定义函数时,可以给 某个参数 赋值一个默认值,具有默认值的参数就叫做 缺省参数
-
调用函数时,如果没有传入 缺省参数 的值,则在函数内部使用 参数默认值
-
将常见的值设置为参数的缺省值,从而 简化函数的调用
-
- 要使用 最常见的值 作为默认值
- 如果一个参数的值 不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递!
例如:对列表排序的方法
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
gl_num_list = [6, 3, 9]
"默认就是升序排序,因为这种应用需求更多"
gl_num_list.sort()
print(gl_num_list)
"只有当需要降序排序时,才需要传递 'reverse' 参数"
gl_num_list.sort(reverse=True)
print(gl_num_list)
缺省参数的定义位置:
- 必须保证带有默认值的缺省参数在参数列表末尾!
调用带有多个缺省参数的函数:
- 在 调用函数时,如果有 多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系!
def print_info(name, title="", gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s%s 是 %s" % (title, name, gender_text))
# 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值!
print_info("小明")
print_info("老王", title="班长")
print_info("小美", gender=False)
5、多值参数
当函数需要处理的参数个数不确定时,可使用 多值参数。
python
中有两种多值参数:
- 接收 元组:参数名前加 一个
*
- 接收 字典:参数名前加 两个
*
一般在给多值参数命名时,习惯使用以下两个名字
*args
— 存放 元组 参数**kwargs
— 存放 字典 参数,(kw
即keyword
,kwargs
即 键值对参数)
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
输出:
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'gender': True}
拆包
在上面多值参数传递时,实际上使用了拆包功能。
拆包主要用于元组和字典参数的传递。
在调用带有多值参数的函数时,使用拆包简化参数的传递:
-
直接将一个 元组变量 实参传递给元组形参
args
-
- 在 元组变量前,加
*
- 在 元组变量前,加
-
直接将一个 字典变量 实参传递给字典形参
kwargs
-
- 在 字典变量前,加
**
- 在 字典变量前,加
def demo(*args, **kwargs):
print(args)
print(kwargs)
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}
"变量名前必须要加 * 号,否则不能无法正常拆包"
"错误演示(不加 * 号):"
demo(gl_nums, gl_xiaoming)
输出:
((1, 2, 3), {'name': '小明', 'age': 18})
{}
"正确演示(加 * 号):"
demo(*gl_nums, **gl_xiaoming)
输出:
(1, 2, 3)
{'name': '小明', 'age': 18}
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16763428.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)