Python教程81:函数的位置参数、默认参数、动态参数、关键字参数(入门必看)

1.形式参数(Formal Parameters)和实际参数(Actual Parameters)是函数或方法定义和调用过程中的两个重要概念。举个例子,在下面的greet函数中,当我们调用greet(“李白”)时,"李白"就是实际参数,name是一个形式参数。这个实际参数,被用来替换函数定义中的形式参数,以执行函数操作。

# @Author : 小红牛
# 微信公众号:WdPython

简单来说,形式参数是函数或方法定义的参数列表,用于规定接收输入的方式;实际参数是在调用函数或方法时传递的值,用于执行函数或方法的操作。

def greet(name):print(f'大家好,我是{name}哥哥')# 调用函数
greet('李白')  # 输出:大家好,我是李白哥哥

2.位置参数(Positional Arguments):位置参数是按照函数定义时的顺序传递的参数。在调用函数时,必须按照定义时的顺序传递参数。位置参数是函数的基础,通常用于定义函数的主体逻辑。这里还说明参数的个数传参的时候要相同,比如下面的greet函数有两个参数,传参的时候也要传两个,实参和形参数量保持一致,且第一个参数是name,第二个参数是age,顺序不能错乱,参数的类型也要一致,不然解释器容易报错。

def greet(name, age):print(f'大家好,我是{name}哥哥,今年{age}岁')# 调用函数时,必须按照定义时的顺序传递参数
greet('李白', 18)  # 输出:大家好,我是李白哥哥,今年18岁# 传参顺序不一样的输出
greet(18, '李白')  # 大家好,我是18哥哥,今年李白岁

3.默认参数(Default Arguments):默认参数是在函数定义时为参数设置一个默认值。如果在调用函数时没有提供该参数的值,那么将使用默认值。默认参数可以减少函数调用的复杂性,同时提供一种灵活的方式来处理未提供的参数值。下面的name=‘李白’, age=18就是两个默认参数。

def greet(name='李白', age=18):print(f'大家好,我是{name}哥哥,今年{age}岁')# 1.调用函数时,不传递任何参数,使用默认值
greet()  # 输出:大家好,我是李白哥哥,今年18岁# 2.调用函数时,只传递一个参数,其他参数使用默认值
greet('杜甫')  # 输出:大家好,我是杜甫哥哥,今年18岁
# 3.查询参数有默认值,返回值是一个元组
print(greet.__defaults__)   #输出 ('李白', 18)

混合参数的使用的小提醒: 当定义一个有默认值参数的函数时,有默认值的参数必须位于所有,没有默认值参数的后面。如下ab参数,放在默认参数name='李白’的前面就不会报错,反之放在后面就会有语法错误。

# 不会报错
def greet(a, b, name='李白', age=18):# 会报错
def greet(name='李白', age=18, a, b):

4.关键字参数(Keyword Arguments):关键字参数,是在调用函数时明确指定参数的名称和值。在函数定义中,可以通过为参数设置默认值来确保它们有默认值,但在调用函数时,可以使用关键字参数来明确指定要使用的值。关键字参数提供了更大的灵活性,允许在调用函数时传递特定的值,而不是使用默认值。下面例子中,func1函数有4个参数abcd,在调用func1的时候指定了关键字参数d=4,指定的实参和形参,写法上都要放在最后面,除非你把所有的参数,都传入的是关键字参数,这样可以无序传参 。func2函数错误的原因,是因为形参c,如果是关键字参数的时候,一定要放在参数的最后面位置,不然报错。所以func3是对func2错误的改写。只需要把指定的关键字参数c,放在最后面即可。即函数含有混合传参时,关键字参数必须位于所有的位置参数之后。

print('1.正确的写法'.center(30, '-'))
def func1(a, b, c, d):print('参数的值:', a, b, c, d)func1(1, 2, 3, d=4)  # 参数的值:1 2 3 4
func1(c=30, a=10, b=20, d=40)  # 参数的值:10 20 30 40print('2.错误的写法'.center(30, '-'))
def func2(a, b, c, d):print('参数的值:', a, b, c, d)
func2(1, 2, 4, c=3)
# 输出 TypeError: func2() got multiple values for argument 'c'print('3.错误的改对的方法'.center(30, '-'))
def func3(a, b, d, c):print('参数的值:', a, b, c, d)
func3(1, 2, 4, c=3) # 参数的值:1 2 3 4

5.动态参数(Variable-length Arguments):动态参数允许函数接受可变数量的参数。在Python中,有两种动态参数类型:args和**kwargs。args用于接收任意数量的位置参数,**kwargs用于接收任意数量的关键字参数。这些动态参数可以与其他普通参数一起传递给函数,以实现更灵活的函数调用。

# 动态参数示例(*args)  
def sum_numbers(*numbers):total = 0for num in numbers:total += numreturn total# 调用函数时,传递任意数量的数字参数
result = sum_numbers(1, 2, 3)
print(result)   # 输出:6
result2 = sum_numbers(1, 2, 3, 4, 5)
print(result2)   # 输出:15

**kwargs的示例用法

def print_info(**kwargs):print(kwargs.items())for key, value in kwargs.items():print(f"{key}: {value}")# 调用函数并传递参数
print_info(name="李白", age=18, city='唐')

输出内容:

dict_items([('name', '李白'), ('age', 18), ('city', '唐')])
name: 李白
age: 18
city:

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具

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

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

相关文章

electron这样使用更安全

背景: electron大家平时为了方便使用,或是一些网上demo的引导,会让渲染进程的业务界面支持直接使用nodejs,这种开发方式有一定的安全隐患,如果业务界面因为xss之类的漏洞被注入其他代码,危害非常大&#x…

Spring之容器:IOC(3)

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

华为云CodeArts Repo常见问答汇总

1.【Repo】codearts Repo最大支持上传文件大小 答&#xff1a;参考链接 https://support.huaweicloud.com/productdesc-codehub/codehub_pdtd_0005.html • 单文件上传大小限制&#xff08;评论中上传附件&#xff09;<50MB。 • 单文件上传大小限制&#xff08;代码…

某联合产权交易所持续购买监控易产品的维保服务,提升IT运维保障能力

在信息化时代&#xff0c;企业信息化的程度已经成为影响其核心竞争力的重要因素。某联合产权交易所&#xff08;以下简称“交易所”&#xff09;作为行业领导者&#xff0c;一直以来都积极推进信息化建设&#xff0c;致力于提升运维管理水平&#xff0c;以适应日益激烈的市场竞…

Rust 嵌入式开发

Rust 进行嵌入式开发: https://xxchang.github.io/book/intro/index.html # 列出所有目标平台 rustup target list# 安装目标平台工具链 rustup target add thumbv7m-none-eabi# 创建工程 cargo new demo && cd demo cargo add cortex-m-rt cargo add panic-halt carg…

二十九、获取文件属性及相关信息

二十九、获取文件属性及相关信息QFileInfo QFileInfo 提供有关文件在文件系统中的名称 位置 &#xff08;路径&#xff09;、访问权限及它是目录还是符号链接、等信息。文件的大小、最后修改/读取时间也是可用的。QFileInfo 也可以被用于获取信息有关 Qt resource . QFileInf…

科技的成就(五十四)

511、线路板按层数来分的话分为单面板&#xff0c;双面板&#xff0c;和多层线路板三个大的分类。线路板按特性来分的话分为软板(FPC)&#xff0c;硬板(PCB)&#xff0c;软硬结合板(FPCB)。是当代电子元件业中最活跃的产业&#xff0c;其行业增长速度一般都高于电子元件产业3个…

算法模板之双链表图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️使用数组模拟双链表讲解1.1 &#x1f514;为什么我们要使用数组去模拟双链表…

使用java调用python批处理将pdf转为图片

你可以使用Java中的ProcessBuilder来调用Python脚本&#xff0c;并将PDF转换为图片。以下是一个简单的Java代码示例&#xff0c;假设你的Python脚本名为pdf2img.py&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

Powershell summaries with types of scales of summaries

tiny,small,medium, large and huge scale of Powershell summaries I) many kinds of Tiny summaries of Powershell1.1) Powershell能干嘛&#xff1f; I) many kinds of Tiny summaries of Powershell 1.1) Powershell能干嘛&#xff1f; 此外&#xff0c;关于PowerShell脚…

Java数组(2)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Kotlin 笔记 -- Kotlin 语言特性的理解(二)

都是编译成字节码&#xff0c;为什么 Kotlin 能支持 Java 中没有的特性&#xff1f; kotlin 有哪些 Java 中没有的特性&#xff1a; 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…

图像与视频压缩算法

图像压缩是通过减少图像数据量来降低图像文件的大小&#xff0c;从而减少存储空间和传输带宽。有多种图像压缩算法&#xff0c;它们可以分为两大类&#xff1a;有损压缩和无损压缩。 无损压缩算法&#xff1a; Run-Length Encoding (RLE): 这是一种简单的无损压缩方法&#x…

西蒙子S7协议介绍

西门子的S7 协议&#xff0c;没有仍何关于S7协议的官方文档&#xff0c;是一个不透明的协议。关于S7的协议介绍&#xff0c;大都是非官方的一些七零八落的文档。 1. S7的通信模型 西蒙子S7 通讯遵从着基于TCP 的 Master&#xff08;client&#xff09; & Slave&#xff0…

读取小数部分

1.题目描述 2.题目分析 //假设字符串为 char arr[] "123.4500"; 1. 找到小数点位置和末尾位置 代码如下&#xff1a; char* start strchr(arr, .);//找到小数点位置char* end start strlen(start) - 1;//找到末尾位置 如果有不知道strchr()用法的同学&#xf…

Pytorch神经网络的模型架构(nn.Module和nn.Sequential的用法)

一、层和块 在构造自定义块之前&#xff0c;我们先回顾一下多层感知机的代码。下面的代码生成一个网络&#xff0c;其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层&#xff0c;然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 import torch from torch im…

Linux 基本语句_16_Udp网络聊天室

代码&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h> #include <string…

中小型企业网络综合实战案例分享

实验背景 某公司总部在厦门&#xff0c;北京、上海都有分部&#xff0c;网络结构如图所示&#xff1a; 一、网络连接描述&#xff1a; 厦门总部&#xff1a;内部网络使用SW1、SW2、SW3三台交换机&#xff0c;SW1为作为核心交换机&#xff0c;SW2、SW3作为接入层交换机&#x…

go语言实现文件夹上传前后端代码案例

go语言实现文件夹上传前后端代码案例 前端用于上传的测试界面 如果上传的文件夹有子文件要遍历子文件夹创建出子文件夹再进行拷贝需要获取文件名和对应的路径&#xff0c;将文件的相对路径和文件对象添加到FormData中这几行代码很关键 for (let i 0; i < files.length; i…

PDF控件Spire.PDF for .NET【转换】演示:将多个图像转换为单个 PDF

如果您想要将多个图像合并为一个文件以便于分发或存储&#xff0c;将它们转换为单个 PDF 文档是一个很好的解决方案。这一过程不仅节省空间&#xff0c;还确保所有图像都保存在一个文件中&#xff0c;方便共享或传输。在本文中&#xff0c;您将学习如何使用Spire.PDF for .NET …