Python初学者友好丨详解参数传递类型
摘要: 本文清晰地解释了Python中的不同参数传递类型,并提供了示例代码来说明每种类型的用法。对于初学者或不清楚Python传参的读者们来说是非常有益的,文中提供了足够的信息来理解和使用Python中的函数参数传递。
本文分享自华为云社区《提升Python函数调用灵活性:参数传递类型详解》,作者:frica01 。
前言
在Python编程中,函数参数起着非常重要的作用。函数参数允许我们向函数传递数据,并在函数内部使用这些值。Python提供了多种参数传递类型,包括位置参数、关键字参数、默认参数、可变数量的位置参数、可变数量的关键字参数。这些不同的参数传递方式使得函数调用更加灵活和可扩展。本文就来具体聊聊它们。
什么是Python传参
在 Python 中,传参是指在函数调用过程中将数据传递给函数的过程。传参允许我们向函数传递数据,以便在函数内部使用这些数据进行操作和处理。
在 Python 中,函数定义时使用的参数称为形式参数,也称为形参。形参是在函数定义过程中用来接收传递给函数的值的占位符。形参在函数体内被当作变量来使用,可以在函数体中进行操作和处理。
实际参数,也称为实参,是在函数调用时传递给函数的值或变量。实参是实际传递给函数的具体数值或对象。当我们调用一个函数时,需要为函数的形参提供相应的实参,这样函数才能执行相应的操作。
下面是一个简单的示例:
def demo(name): print("Hello, " + name + "!") demo("Frica")
在上面的例子中,name 是函数 demo 的形参。
在函数调用时,传递了实参 Frica 给函数 demo,它被赋值给形参 name,然后函数体内部使用这个值进行打印操作。
总结起来,形参是函数定义中用于接收传递给函数的值的占位符,而实参是在函数调用时实际传递给函数的具体数值或对象。形参和实参的对应关系使得函数能够处理和操作具体的数据。
五种传参类型
传参类型可以单独使用,也可以组合使用。根据需要在函数定义中灵活地选择使用这些传参类型。
以下是Python中常见的几种传参类型:
- 位置参数:位置参数是最常见的参数类型,通过按照参数定义的顺序提供参数值;
- 关键字参数:关键字参数允许使用参数的名称来指定值,而不必按照顺序提供参数;
- 默认参数:默认参数允许为函数的一个或多个参数提供默认值。如果在函数调用时没有提供参数值,函数将使用默认值;
- 可变数量的位置参数:可变数量的位置参数允许接受任意数量的位置参数。在函数定义中,使用星号(*)来指定一个可变数量的位置参数,如果没有提供额外的位置参数,args将是一个空元组(());
- 可变数量的关键字参数:可变数量的关键字参数允许接受任意数量的关键字参数。在函数定义中,使用双星号(**)来指定一个可变数量的关键字参数,如果没有提供额外的关键字参数,kwargs将是一个空字典({})。
位置传参
位置参数:位置参数是最常见的参数类型。当定义一个函数时,可以指定一个或多个位置参数。在调用函数时,需要按照参数的顺序提供对应的值。例如:
def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica", 25)
在上面的例子中,name 和 age 是位置参数,按照顺序分别提供 “Frica” 和 25 作为参数值。
关键字传参
关键字参数:关键字参数允许你使用参数的名称来指定值,而不必按照顺序提供参数。使用关键字参数可以使代码更加清晰和易读。例如:
def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo(age=25, name="Frica")
在上面的例子中,通过使用 age=25 和 name="Frica" 来指定参数的值,而不必考虑它们的顺序。
默认传参
默认参数:默认参数允许为函数的一个或多个参数提供默认值。
如果在函数调用时没有提供参数值,函数将使用默认值。默认参数通常在函数定义中指定,并且必须要位于位置参数之后(否则会有SyntaxError异常)。例如:
def demo(name, age=18): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica") # 使用默认值18 demo("Frica01", 25) # 覆盖默认值
在上面的例子中,age 参数有一个默认值 18。如果没有为 age 提供参数值,函数将使用默认值。
可变数量的位置传参
一般我们会使用 *args,当然,使用其它的变量也可以(这里的关键是 *,而不是args。
可变数量的位置传参:可变数量的位置参数允许接受任意数量的位置参数。在可能不确定函数会接受多少个参数的情况下,可以使用可变数量的参数。在函数定义中,可以使用星号(*)来指定一个可变数量的位置参数。例如:
def print_info(*args): print(type(args))# 输出: <class 'tuple'> total = sum(num for num in args) return total result = print_info(1, 2, 3, 4, 5)
print(result) # 输出:15
在上面的例子中,print_info 函数接受任意数量的位置参数,并将它们相加。
可变数量的关键字传参
一般我们会使用 **kwargs,当然,使用其它的变量也可以(这里的关键是 **,而不是kwargs。
可变数量的关键字参数传递:可变数量的关键字参数允许接受任意数量的关键字参数。在函数定义中,可以使用双星号(**)来指定一个可变数量的关键字参数。例如:
def print_info(**kwargs): print(type(kwargs)) # 输出: <class 'dict'> for key, value in kwargs.items(): print(key, ":", value) print_info(name="Frica", age=25, city="GuangZhou")
在上面的例子中,demo 函数接受任意数量的关键字参数,并将它们打印出来。
多种传参类型组合
def print_info(name, *args, age=18, **kwargs): print("Name:", name) print("Age:", age) print("Additional arguments:") for arg in args: print("-", arg) print("Keyword arguments:") for key, value in kwargs.items(): print("-", key, ":", value) print_info("Frica", "arg1", "arg2", age=25, city="GuangZhou", country="China")
在上面的例子中,函数print_info接受以下参数:
- name是一个位置参数,必须提供值。
- *args是一个可变数量的位置参数,可以接受任意数量的额外参数。
- age是一个具有默认值的关键字参数。
- **kwargs是一个可变数量的关键字参数,可以接受任意数量的关键字参数。
通过调用print_info函数,并提供相应的参数,可以灵活地组合使用这些参数类型。在函数体内部,可以根据需要访问和处理这些参数。
当调用print_info函数时,输出如下:
Name: Frica Age: 25 Additional arguments: - arg1 - arg2 Keyword arguments: - city : GuangZhou - country : China
这个例子展示了多种传参类型的组合,包括位置参数、可变数量的位置参数、具有默认值的关键字参数和可变数量的关键字参数。读者可以根据实际的开发需求,在函数中灵活使用这些参数类型。
函数参数类型注解
这里以位置参数为例,
def demo(name: str, age: int) -> str: return "Hello, " + name + "! You are " + str(age) + " years old." print(demo("Frica", 25))# 输出: Hello, Frica! You are 25 years old.
在这个例子中,参数 name 的类型被注解为字符串类型 str,参数 age 的类型被注解为整数类型 int,返回值的类型被注解为字符串类型 str。参数类型注解可以提供类型提示,帮助开发者更好地理解函数的参数和返回值的预期类型。
当然,这里只相当于是注释,即使传入的是其它类型是数据,也不会报错!!!
总结
本文介绍了Python中函数参数的不同类型和传递方式。
- 位置参数是最常见的参数类型,按照参数定义的顺序提供参数值。
- 关键字参数允许使用参数名称来指定值,提高了代码的可读性。
- 默认参数为函数的一个或多个参数提供默认值,在函数调用时可以选择性地提供参数值。
- 可变数量的位置参数和可变数量的关键字参数允许接受任意数量的位置参数和关键字参数,提供了处理不确定数量参数的便利性。
在函数定义中,我们可以根据需要灵活地选择使用这些参数传递类型,以满足开发的需求。通过合理选择参数传递类型,可以使得函数调用更加方便、可读,并提高代码的可扩展性。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
视频编码耗时长、编码帧发送失败…DVPP视频编码问题典型案例分析
摘要:本期就分享几个关于DVPP视频编码问题的典型案例,并给出原因分析及解决方法 本文分享自华为云社区《DVPP媒体数据处理视频编码问题案例》,作者:昇腾CANN。 DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。 本期就分享几个关于DVPP视频编码问题的典型案例,并给出原因分析及解决方法: 参数设置不合理,导致视频编码耗时长或编码失败 发送待编码帧成功,但视频编码无输出 发送待编码帧失败 01 参数设置不合理,导致视频编码耗时长或编码失败 问题现象描述 视频编码耗时长或编码失败。运行编码应用进程后,使用dvpp的proc信息排查问题,步骤如下:登录运行编码应用进程的环境,在有读、写、执行权限的目录下执行msnpureport -a命令,导出proc日志信息。按导出时间,进入对应时间戳的目录下,打开“module_info\dev-os-0\dvpp\dvpp_proc.log”日志。proc信息中关键信息含义如...
- 下一篇
vivo 帐号服务稳定性建设之路-平台产品系列06
作者:vivo 互联网平台产品研发团队- Shi Jianhua、Sun Song 帐号是一个核心的基础服务,对于基础服务而言稳定性就是生命线。在这篇文章中,将与大家分享我们在帐号稳定性建设方面的经验和探索。 一、前言 vivo帐号是用户畅享整个vivo生态服务的必备通行证,也是生态内各业务开展的基石。伴随公司业务快速增长,帐号系统目前服务的在网用户已达到2.7亿,日均调用量破百亿,作为一个典型的三高(高性能、高并发、高可用)属性的系统,帐号系统的稳定性显得尤为重要。而要保障系统的稳定性,我们需要综合考虑多方面因素。本文将从应用服务、数据架构、监控三个维度出发,分享帐号服务端在稳定性建设方面的经验总结。 二、应用服务治理 《架构整洁之道》书中将软件的价值总结为“行为”、“架构”两个维度。 行为价值:让机器按照某种指定方式运转,给系统的使用者创造或提高利润。 架构价值:始终保持软件的灵活性,以便让我们可以灵活地改变机器的工作行为。 行为价值描述的是当下,对于用户最直观的感受就是易用性、功能丰富程度等。好的行为价值能够吸引用户,进而对服务提供者能有一个正向回报。 架构价值描述的是未来,指服...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址