提升Python函数调用灵活性:参数传递类型详解

news2024/11/16 1:55:35

在这里插入图片描述

前言

在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)

在上面的例子中,nameage 是位置参数,按照顺序分别提供 “Frica” 和 25 作为参数值。

关键字传参

关键字参数:关键字参数允许你使用参数的名称来指定值,而不必按照顺序提供参数。使用关键字参数可以使代码更加清晰和易读。例如:

def demo(name, age):
    print("Hello", name, "!")
    print("You are", age, "years old.")

demo(age=25, name="Frica")

在上面的例子中,通过使用 age=25name="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中函数参数的不同类型和传递方式。

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

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

后话

本次分享到此结束,

see you~~🐱‍🏍🐱‍🏍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——串(字符串)

文章目录 **一 串的定义和实现****1 定义****2 串的存储结构****2.1 定长顺序存储表示****2.2 堆分配存储表示****2.3 块链存储表示** **3 串的基本操作** **二 串的模式匹配****1 简单的模式匹配算法****2 串的模式匹配算法——KMP算法****2.1 字符串的前缀&#xff0c;后缀和…

一起学SF框架系列5.4-模块Beans-DefaultListableBeanFactory

在生成ApplicationContext过程中&#xff0c;AbstractRefreshableApplicationContext.refreshBeanFactory()完成旧BeanFactory关闭&#xff0c;创建新的BeanFactory&#xff0c;即new DefaultListableBeanFactory(…)。然后bean实例化时调用本类的preInstantiateSingletons方法…

网安笔记12 IPsec

IPSec 基于通信IP环境下一种端到端&#xff0c;保证数据安全的机制 包含 两个安全协议&#xff0c;一个密钥管理协议&#xff0c; 标准价秘密技术为基础 DES/其他分组加密算法键值hash算法认证公钥有效的数字证书 AH协议提供信息源验证、完整性保证ESP提供信息源验证、机密…

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1&#xff09;创建远程分支 2&#xff09;删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

Linux系统:CentOS编译Linux内核

目录 一、实验 1.下载内核 2.解压内核源码 3.配置依赖的环境 4.进入源码目录&#xff0c;使用make menuconfig开启菜单选项&#xff0c;手动选择内核功能 5.编译内核 6.安装模块 7.安装内核 8.验证新内核版本 一、实验 1.下载内核 &#xff08;1&#xff09;官网下载…

010:vue中el-table 隐藏表头的两种方法

第010个 查看专栏目录: VUE — element UI echarts&#xff0c;openlayers&#xff0c;cesium&#xff0c;leaflet&#xff0c;mapbox&#xff0c;d3&#xff0c;canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例…

【Kubernetes存储篇】StorageClass存储类动态生成PV详解

文章目录 一、StorageClass存储类理论二、案例&#xff1a;Storageclass存储类实战演示1、搭建NFS服务端2、搭建NFS供应商(provisioner)3、创建StorageClass存储类4、创建PVC&#xff0c;通过StorageClass动态生成PV5、创建Pod挂载PVC 三、步骤总结 一、StorageClass存储类理论…

web测试工程师的工作职责

web测试工程师的工作职责1 职责: 1、 负责数据平台产品的测试工作&#xff0c;参与产品需求分析&#xff0c;负责方案制定,并能预先评估项目风险&#xff0c;确保测试活动的顺利开展; 2、 深入理解系统内部的设计原理&#xff0c;并能从测试的角度提供优化意见; 3、 根据产品需…

LVS+Keepalived 高可用群集实战部署

目录 前言 一、Keepalived工具介绍 1、Keepalived的作用 2、 Keepalived体系主要模块 二、keepalived工作原理 1、VRRP &#xff08;虚拟路由冗余协议&#xff09; 2、VRRP &#xff08;虚拟路由冗余协议&#xff09; &#xff08;1&#xff09;keepalived.conf是主配置文…

qt 使用qtpdfium实现读取pdf文件

此处仅作为笔记和配置指导。 要想获取源码可Git hub上下载&#xff0c;这里推荐一个&#xff1a;QtPdfium_Build_Source: 基于Google pdfium 库&#xff0c;可编译和编译好的Qtpdfium 库&#xff0c;用于加载pdf文件进行预览 (gitee.com) 目前小编根据推荐的编译方法&#xf…

STM32F0实现数字化SPWM纯正弦波逆变器

一、理论基础 所谓SPWM&#xff0c;就是通过只有开关两个状态&#xff08;离散&#xff0c;数字的&#xff09;的PWM序列产生正弦波&#xff08;连续&#xff0c;模拟的&#xff09;的方法。其理论基础一句话就能说明白&#xff1a;冲量相等而形状不同的窄脉冲加在具有惯性的环…

golang语法的注意事项

目录 1.源文件以.go结尾2.过文件只能存在一个mian 函数 (入口函数)3. go严格区分大小写4. golang的每行代码是一个语句 默认存在 ; 不需要自己写了5. golang 是每一行每一行的执行的 不要把多个语句写在一行6. 定义变量 或是导入的包未使用 无法同过编译7. {} 都是成对出现 为了…

Xtrak 塔克小车巡线代码以及红绿灯识别相关小改动

做的小改动&#xff1a; 只更改了xtark_follow_line.py 增加了一次HSV分割来做红绿灯识别&#xff08;建议到时候用手机或者平板显示红色或者绿色图片&#xff09;&#xff0c;红绿图片&#xff1a; 将检测道路位置的方式从重心变为最接近屏幕中心的道路像素点。 检测不到道路之…

ubuntu 22.04部署dzzoffice及安装onlyoffice插件

目录 一、配置阿里源 二、安装数据库 三、安装依赖组件 &#xff08;一&#xff09;安装php7.4 &#xff08;二&#xff09;安装apache2 四、下载 dzzoffice 五、安装dzzoffice 六、安装onlyoffice插件 &#xff08;一&#xff09;从github下载小胡版onlyoffice替代原来…

如何学习及计算机编程,入门看这一篇就够了---以c语言为例

信息时代&#xff0c;计算机变成不再是专业性很强的一门学科&#xff0c;更多的是变成了一种工具 用计算机爬取信息&#xff08;爬虫&#xff09;进行数据分析&#xff0c;数据可视化&#xff08;大数据的某个方面&#xff09;处理海量的数据&#xff0c;如excel&#xff08;百…

声音生成项目(4)——从VariantAutoencoder(VAE)到VQ-VAE矢量量化变分编码器

文章目录 论文介绍步骤具体讲解自定义矢量量化层获取最近距离的码字的索引计算推导损失函数相关参考 矢量量化层的代码实现完整代码实现 论文介绍 不同于变分编码器和自动编码器&#xff0c;vq-vae中的latent space是离散的&#xff0c;并不是连续的&#xff0c;这能够避免后验…

第3章“程序的机器级表示”:理解指针

指针是 C 语言的一个重要特色。它们提供一种统一方式&#xff0c;能够远程访问数据结构。 指针基本的概念其实非常简单&#xff0c;下面的代码说明了许多这样的概念&#xff1a; struct str { /* Example Structure */int t;char v; };union uni { /* Example Union */int t;…

大厂C++面试基础题第1辑——虚函数七题精讲之一

> “虚函数的作用” 是面向对象的C编程最基础也最核心的知识点&#xff0c;如果不能无法正确回答本题&#xff0c;则只此一题&#xff0c;不管大厂还是小厂&#xff0c;都铁定无缘了。 概述 “虚函数” 是 C面向对象三最&#xff1a;最基础、最重要、最关键的知识点。我们从…

什么是Vue的Vite构建工具?如何使用Vite进行项目开发

什么是Vue的Vite构建工具&#xff1f;如何使用Vite进行项目开发 介绍 Vite是一个由Vue.js核心团队开发的构建工具。它的目标是提供一种快速的开发体验&#xff0c;同时保持生产环境的稳定性和可靠性。Vite使用了ES模块作为开发环境的原生模块格式&#xff0c;通过在开发服务器…