摘要: 本文清晰地解释了Python中的不同参数传递类型,并提供了示例代码来说明每种类型的用法。对于初学者或不清楚Python传参的读者们来说是非常有益的,文中提供了足够的信息来理解和使用Python中的函数参数传递。

本文分享自华为云社区《提升Python函数调用灵活性:参数传递类型详解》,作者:frica01 。

前言

在Python编程中,函数参数起着非常重要的作用。函数参数允许我们向函数传递数据,并在函数内部使用这些值。Python提供了多种参数传递类型,包括位置参数、关键字参数、默认参数、可变数量的位置参数、可变数量的关键字参数。这些不同的参数传递方式使得函数调用更加灵活和可扩展。本文就来具体聊聊它们。

什么是Python传参

在 Python 中,传参是指在函数调用过程中将数据传递给函数的过程。传参允许我们向函数传递数据,以便在函数内部使用这些数据进行操作和处理。

在 Python 中,函数定义时使用的参数称为形式参数,也称为形参。形参是在函数定义过程中用来接收传递给函数的值的占位符。形参在函数体内被当作变量来使用,可以在函数体中进行操作和处理。

实际参数,也称为实参,是在函数调用时传递给函数的值或变量。实参是实际传递给函数的具体数值或对象。当我们调用一个函数时,需要为函数的形参提供相应的实参,这样函数才能执行相应的操作。

下面是一个简单的示例:

def demo(name):
print("Hello, " + name + "!")
demo("Frica")

在上面的例子中,name 是函数 demo 的形参。

在函数调用时,传递了实参 Frica 给函数 demo,它被赋值给形参 name,然后函数体内部使用这个值进行打印操作。

总结起来,形参是函数定义中用于接收传递给函数的值的占位符,而实参是在函数调用时实际传递给函数的具体数值或对象。形参和实参的对应关系使得函数能够处理和操作具体的数据。

五种传参类型

传参类型可以单独使用,也可以组合使用。根据需要在函数定义中灵活地选择使用这些传参类型。

以下是Python中常见的几种传参类型:

  1. 位置参数:位置参数是最常见的参数类型,通过按照参数定义的顺序提供参数值;
  2. 关键字参数:关键字参数允许使用参数的名称来指定值,而不必按照顺序提供参数;
  3. 默认参数:默认参数允许为函数的一个或多个参数提供默认值。如果在函数调用时没有提供参数值,函数将使用默认值;
  4. 可变数量的位置参数:可变数量的位置参数允许接受任意数量的位置参数。在函数定义中,使用星号(*)来指定一个可变数量的位置参数,如果没有提供额外的位置参数,args将是一个空元组(());
  5. 可变数量的关键字参数:可变数量的关键字参数允许接受任意数量的关键字参数。在函数定义中,使用双星号(**)来指定一个可变数量的关键字参数,如果没有提供额外的关键字参数,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中函数参数的不同类型和传递方式。

  • 位置参数是最常见的参数类型,按照参数定义的顺序提供参数值。
  • 关键字参数允许使用参数名称来指定值,提高了代码的可读性。
  • 默认参数为函数的一个或多个参数提供默认值,在函数调用时可以选择性地提供参数值。
  • 可变数量的位置参数和可变数量的关键字参数允许接受任意数量的位置参数和关键字参数,提供了处理不确定数量参数的便利性。

在函数定义中,我们可以根据需要灵活地选择使用这些参数传递类型,以满足开发的需求。通过合理选择参数传递类型,可以使得函数调用更加方便、可读,并提高代码的可扩展性。

点击关注,第一时间了解华为云新鲜技术~

Python初学者友好丨详解参数传递类型的更多相关文章

  1. Python初学者常见错误详解

    Python初学者常见错误详解 0.忘记写冒号 在 if.elif.else.for.while.class.def 语句后面忘记添加 “:”   if spam == 42 print('Hello ...

  2. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

  3. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  4. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  5. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  6. Python 列表(List)操作方法详解

    Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下   列表是Python中最基本 ...

  7. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  8. Python的logging模块详解

          Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...

  9. python操作redis用法详解

    python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...

  10. Python变量和字符串详解

    Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...

随机推荐

  1. 京东LBS推荐算法实践

    作者:京东零售 郑书剑 1.推荐LBS业务介绍 1.1 业务场景 现有的同城购业务围绕京东即时零售能力搭建了到店.到家两种业务场景.同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主 ...

  2. C# System.ObjectDisposedException: Cannot access a disposed object, A common cause of thiserror is disposing a context that was resolved from dependency injection and then later trying touse...

    项目中使用了依赖注入,这个错误在我项目中的原因:在async修饰的异步方法中,调用执行数据库操作的方法时,没有使用await关键字调用,因为没有等待该调用,所以在调用完成之前将继续执行该方法.因此,已 ...

  3. SSL CA 证书生成shell

    gencert ssl证书生成 要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择.HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上. SSL使用 ...

  4. 命令行编译和执行java代码

    虽然现在IDE很强大又很智能,但是平常随意写点练手的代码的时候,直接在命令行中使用vim和java命令更为方便快捷,可以做到无鼠标纯键盘的操作. 首先保证将java相关指令添加到了环境变量中: 1.编 ...

  5. AI天后,在线飙歌,人工智能AI孙燕姿模型应用实践,复刻《遥远的歌》,原唱晴子(Python3.10)

    忽如一夜春风来,亚洲天后孙燕姿独特而柔美的音色再度响彻华语乐坛,只不过这一次,不是因为她出了新专辑,而是人工智能AI技术对于孙燕姿音色的完美复刻,以大江灌浪之势对华语歌坛诸多经典作品进行了翻唱,还原度 ...

  6. python库Munch的使用记录

    开头 日常操作字典发现发现并不是很便利,特别是需要用很多 get('xxx','-') 的使用,就觉得很烦,偶然看到Kuls大佬公众号发布的一篇技术文有对 python munch库的使用, 使得字典 ...

  7. S5PV210 | 裸机汇编LED流水灯实验

    S5PV210 | 裸机汇编LED流水灯实验 目录 S5PV210 | 裸机汇编LED流水灯实验 开发板: 1.原理图 2.Datasheet相关 3.代码 3-1.代码实现(流水灯,仅作演示) 3- ...

  8. 2021-10-24:快乐数。编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是

    2021-10-24:快乐数.编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和.然后重复这个过程直到这个数变为 1,也可能是 ...

  9. 火山引擎DataTester:A/B实验平台数据集成技术分享

    DataTester的数据集成系统,可大幅降低企业接入A/B实验平台门槛.   当企业想要接入一套A/B实验平台的时候,常常会遇到这样的问题: 企业已经有一套埋点系统了,增加A/B实验平台的话需要重复 ...

  10. 基于go语言的声明式流式ETL,高性能和弹性流处理器

    简要介绍Benthos,并给出若干示例,指导如何安装和运行. Benthos Benthos 是一个开源的.高性能和弹性的数据流处理器,能够以各种代理模式连接各种源和汇,可以帮助用户在不同的消息流之间 ...