【python】函数的参数(实参,形参,*args和**kwargs)

news/2024/12/29 8:04:38/

一、实参和形参

实参: 函数执行的时候给函数传递的具体的值
形参: 在函数声明时编写的变量
函数执行时每个形参都要有值

# a,b为形参
def add(a, b):print(a + b)
# 3,4为实参    
add(3, 4)

二、实参

1.位置参数

按位置给形参传递数据

def add(a, b):print(a + b)
# 3,4为位置参数   
add(3, 4)

2.关键字参数

按形参的名字传递数据

def add(a, b, c):print(a + b - c)
# 关键字参数
add(c=10, a=5, b=4)

3.混合参数

位置参数与关键字参数,混合使用
注意顺序: 先位置参数,后关键字参数

def add(a, b, c):print(a + b - c)
add(10, c=5, b=4)

二、形参

1. 位置参数

def add(a, b, c):print(a + b - c)

2. 默认值参数

调用函数时默认值参数可以不给具体的值,直接使用默认值

# 调用函数时可以只给a,b传值,c默认为100
def add(a, b, c = 100):print(a + b - c)

3. 动态传参(*args和**kwargs)

*:接收任意个位置参数,自动打包成元组
**:接收任意个关键字参数,自动打包成字典
*args和**args只是通常的命名习惯,也可以命名成其他的

3.1 *

def chi(*food):print(food)
chi("米饭", "苹果", "牛肉", "冰淇淋")
# 打印结果为:('米饭', '苹果', '牛肉', '冰淇淋')

3.2. **

def chi(**food):print(food)
chi(main_food="米饭", fruit="苹果", meat="牛肉")
# 打印结果为:
# {'main_food': '米饭', 'fruit': '苹果', 'meat': '牛肉'}

4. 形参的使用顺序(重要)

正确使用顺序:位置参数 > *args > 默认值参数 > **kwargs
例如:

def func(a, *args, b=10, **kwargs):print(a, args, b, kwargs)

三、可以接受任意参数的函数

# *args接受所有的位置参数,**kwargs接受所有的关键字参数
def func(*args, **kwargs):print(args)print(kwargs)

*和**的打散功能(重要)

在形参: 聚合,*把位置参数聚合成元组,**把关键字参数聚合成字典
在实参: 打散,*把可迭代对象转化成位置参数,**把字典转化成关键字参数

# 例如:列表的打散
def func(*args):print(args)
lst = ["a", "b", "c"]
# 一个个传递参数
func(lst[0], lst[1], lst[2])
# 打散直接传递
func(*lst)
# 例如:字典的打散
def func(**kwargs):print(kwargs)dic = {"a": 1, "b": 2, "c": 3}
# 一个个传递参数
func(a=dic["a"], b=dic["b"], c=dic["c"])
# 打散直接传递
func(**dic)

http://www.ppmy.cn/news/1269529.html

相关文章

Docker-compose容器编排与容器监控

一、Docker-compose 1、概念: Docker-Compose 是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。 2、作用: Docker-Compose可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件 docker-compose.yml&#…

通过socketpair+select实现线程同步的用法代码

1,socketpair详细用法说明 socketpair()是一个Unix/Linux系统调用,用于创建一个本地端对(socket pair)。它创建两个已连接的socket描述符,用于在同一进程中的两个不同线程之间进行通信。 以下是socketpair()函数的详…

Qt设置类似于qq登录页面(ikun)

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…

Ganache结合内网穿透实现远程或不同局域网进行连接访问

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络&#xff0c;提供图形化界面&#xff0c;log日志等&#xff1b;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角

本节课的内容&#xff0c;就让我们来学习一下ArrayList集合的应用&#xff0c;ArrayList的本质就是一个顺序表&#xff0c;那下面一起来学习吧 目录 一、杨辉三角 1.题目详情及链接 2.剖析题目 3.思路及代码 二、洗牌算法 1.创造牌对象 2.创造一副牌 3.洗牌操作 4.发…

WPF-UI HandyControl 简单介绍

文章目录 前言我的网易云专栏和Gitee仓库HandyControlHandyControl示例相关资源地址 我的运行环境快速开始和Material Design功能对比手风琴右键菜单自动补充滚动条轮播图消息通知步骤条托盘按钮 结尾 前言 最近我在研究如何使用WPF做一个比较完整的项目&#xff0c;然后我就先…

【问题处理】—— lombok 的 @Data 大小写区分不敏感

问题描述 今天在项目本地编译的时候&#xff0c;发现有个很奇怪的问题&#xff0c;一直提示某位置找不到符号&#xff0c; 但是实际在Idea中显示确实正常的&#xff0c;一开始以为又是IDEA的故障&#xff0c;所以重启了IDEA&#xff0c;并执行了mvn clean然后重新编译。但是问…

【mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar安装】linux安装mysql5.7

之前安装的时候遇到了很多问题&#xff0c;浪费了一些时间。整理出这份教程&#xff0c;照着做基本一遍过。 这是安装包: 链接&#xff1a;https://pan.baidu.com/s/1gBuQBjA4R5qRYZKPKN3uXw?pwd1nuz 1.下载安装包&#xff0c;上传到linux。我这里就放到downloads目录下面…