python函数的多种参数使用形式

devtools/2025/3/20 8:45:05/

目录

1. 位置参数(Positional Arguments)

2. 关键字参数(Keyword Arguments)

3. 默认参数(Default Arguments)

4. 可变参数(Variable Positional Arguments)

5. 关键字可变参数(Variable Keyword Arguments)

6. 特殊用法:传递列表或字典作为参数


Python中函数的参数使用形式非常灵活,主要包括以下几种类型:位置参数、关键字参数、默认参数、可变参数和关键字可变参数。这些参数类型各有特点,适用于不同的场景。

1. 位置参数(Positional Arguments)

位置参数是最常见的参数类型,调用函数时根据函数定义的参数位置来传递参数。位置参数要求传递的参数和定义的参数的顺序以及个数必须一致。例如:

python"> def user(name, age, gender):print(f"Name: {name}, Age: {age}, Genda:{gender}")​user("Alice", 20, "Female")  # 正确user("Alice", 20)  # 参数数量错误user(25, "Alice", "Female")  # 参数顺序错误

2. 关键字参数(Keyword Arguments)

函数调用时通过“键=值”的形式传递参数,也就是通过参数名传递值,从而忽略参数顺序,让函数调用更加清晰。关键字参数还可以与位置参数混用,但是位置参数必须在关键字参数的前面,关键字参数之间不存在先后顺序。例如:

python"> def user(name, age, genda):print(f"Name: {name}, Age: {age}, Genda:{gender}")​user(name="Alice", age=25, genda="Female")  # 正确user(age=20, name="Alice", genda="Female")  # 正确user("Alice", age=20, genda="Female")  # 正确user(age=20, "Alice", genda="Female")  # 错误,位置参数必须在关键字参数前面

3. 默认参数(Default Arguments)

默认参数也叫缺省参数,在函数定义中为某些参数提供默认值,如果调用时未传递这些参数,则使用默认值。但是要注意所有位置参数必须要出现在默认参数前面,包括函数的定义和调用。例如:

python"> def user(name, age, genda="Famale"):print(f"Name: {name}, Age: {age}, Genda:{gender}")​user("Alice", 20)  # 使用默认性别Famaleuser("Bob", 21, "Male")  # 指定性别Male

4. 可变参数(Variable Positional Arguments)

可变参数也叫不定长参数,允许函数接受任意数量的位置参数(不传参也可以),并将其存储为元组。传入的参数都会被 *args 变量收集,它会根据传进参数的位置合并为一个元组,这就是位置传递。

示例:

python"> def user(*args):print(args)​user("Alice")  # 传入一个参数user("Alice", 20)  # 传入两个参数

5. 关键字可变参数(Variable Keyword Arguments)

关键字可变参数允许函数接受任意数量的关键字参数,并将其存储为字典**kwargs 收集所有未命名的关键字额外参数。

示例:

python"> def user(**kwargs):print(kwargs)​user(name="Alice", age=20)  # 传入两对键值对参数

关键字可变参数适用于需要处理不确定数量的关键字输入的场景。

6. 特殊用法:传递列表或字典作为参数

Python允许将列表或字典直接作为参数传递给函数,这在处理集合类型的输入时非常有用。例如:

python"> def print_list(numbers):for number in numbers:print(number)​print_list([1, 2, 3])  # 输出:1, 2, 3​def print_dict(data):for key, value in data.items():print(f"{key}: {value}")​print_dict({"name": "Alice", "age": 25})  # 输出:name: Alice, age: 25

http://www.ppmy.cn/devtools/168578.html

相关文章

openpnp - 如果安装面的钣金接触面不平,可以尝试加垫片

文章目录 openpnp - 如果安装面的钣金接触面不平,可以尝试加垫片概述吐槽备注END openpnp - 如果安装面的钣金接触面不平,可以尝试加垫片 概述 在X轴导轨上,架上百分表,打设备的工作平面的平面度,发现工作平面不平(和…

蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

一、0握手问题 - 蓝桥云课 算法代码&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;题意很清晰&#xff0c;累加即可。 二、0小球反弹 - 蓝…

Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(五)

翻转队列日志 DDI 添加了以下与翻转队列日志相关的回调和相关结构&#xff1a; DXGKDDI_SETFLIPQUEUELOGBUFFERDXGKARG_SETFLIPQUEUELOGBUFFERDXGK_FLIPQUEUE_LOG_ENTRYDXGKDDI_UPDATEFLIPQUEUELOGDXGKARG_UPDATEFLIPQUEUELOG KMD 提供了一个指向其在 DRIVER_INITIALIZATION…

分布式事务解决方案:Seata原理详解与实战教程

一、为什么需要Seata&#xff1f; 在微服务架构中&#xff0c;跨服务的事务管理成为核心痛点&#xff1a; 传统事务失效&#xff1a;服务拆分导致无法使用本地事务数据不一致风险&#xff1a;网络抖动、服务宕机等情况导致数据错乱复杂场景处理难&#xff1a;涉及多个数据库、…

C语言中,#define和typedef 定义int* 一个容易混淆的点

前言 首先来看一个代码&#xff1a; #include <stdio.h> #include <string.h>#define int_ptr int *int main() {int c 100;int_ptr a , b; // 等效于int * a,b; 那么b就是int类型&#xff0c;不是int*类型a &c;b &c; //报错return 0; } 原意&#x…

【数据分析】数据筛选(布尔索引:一个判断条件)

布尔索引 布尔索引&#xff1a;在实际应用中&#xff0c;只要是通过比较运算返回的判断结果&#xff08;一个布尔型Series&#xff09;&#xff0c;就可以进行布尔索引。 应用场景&#xff1a; 面对大型数据时&#xff0c;用于获取数据的行索引和列索引往往不确定&#xff0c…

代替Windows系统的最佳系统开发:开源、国产与跨平台的选择指南

近年来&#xff0c;随着技术自主化和隐私安全需求的提升&#xff0c;越来越多的用户开始寻求Windows系统的替代方案。本文结合国内外热门操作系统及开发工具&#xff0c;分析其核心优势与适用场景&#xff0c;助你找到最适合的开发与日常使用平台。 一、开源之王&#xff1a;Li…

C语言经典代码练习题

1.输入一个4位数&#xff1a;输出这个输的个位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("输入一个&#xff14;位数&#xff1a;");scanf("%d",&a);printf("个位&#xff1a;%d\n"…