Python参数传递:位置、默认、可变及关键字参数解析
68 浏览量
更新于2024-09-02
收藏 254KB PDF 举报
"详解Python传入参数的几种方法"
在Python编程中,传入函数的参数有多种方式,这些方式让程序员可以根据需求灵活地定义和使用函数。以下是Python中常见的几种参数传递方式:
1. 位置参数(Positional Arguments)
位置参数是最基础的参数类型,调用函数时按照定义函数时的顺序传入值。例如:
```python
def func(a, b):
print(a + b)
func(1, 2) # 输出:3
```
在这个例子中,`a` 和 `b` 是位置参数,调用 `func(1, 2)` 会将整数 `1` 赋值给 `a`,`2` 赋值给 `b`。
2. 默认参数(Default Arguments)
默认参数允许在未提供对应值时使用预设值。定义时,将默认值放在等号后:
```python
def power(x, n=2):
s = 1
while n > 0:
n -= 1
s *= x
return s
power(3) # 输出:9
power(2, 3) # 输出:8
```
在 `power` 函数中,`n` 是默认参数,如果不提供 `n` 的值,它将默认为 `2`。
**注意**:默认参数的值应当是不可变对象(如数字、字符串或元组),因为默认参数在函数定义时初始化一次,之后每次调用都不会改变。如果默认参数是可变对象(如列表、字典),可能导致意外的结果,如下面的反例所示:
```python
def add_end(l=[]):
l.append('END')
return l
# 反例:不推荐这样使用默认参数
```
3. 可变参数(Variable-Length Arguments)
可变参数允许你在调用函数时传入任意数量的参数,这些参数会被打包成一个元组(对于非关键字参数)或字典(对于关键字参数)。示例如下:
```python
def calc(*nums):
sum = 0
for n in nums:
sum += n
return sum
print(calc(1, 2, 3)) # 输出:6
```
在 `calc` 函数中,`*nums` 表示可变参数,可以接收任意数量的数值。
4. 关键字参数(Keyword Arguments)
关键字参数允许在调用函数时指定参数名,可以自由调整参数的顺序:
```python
def person(name, age):
print(f'Name: {name}, Age: {age}')
person(age=30, name='Alice') # 输出:Name: Alice, Age: 30
```
在这里,`name` 和 `age` 是关键字参数,可以通过指定参数名来传入值。
5. 命名关键字参数(Named Keyword Arguments)
命名关键字参数是在函数定义时设置一个“命名分界点”,之后的所有参数都必须使用关键字指定:
```python
def person(name, age, **extra):
print(f'Name: {name}, Age: {age}')
for key, value in extra.items():
print(f'{key}: {value}')
person('Alice', 30, city='New York', job='Engineer') # 输出:Name: Alice, Age: 30
# 输出:city: New York
# 输出:job: Engineer
```
在 `person` 函数中,`**extra` 是命名关键字参数,可以接收任意数量的键值对。
结合以上各种参数类型,Python 允许函数定义和调用时进行组合,提供了极大的灵活性。例如,可以先传入位置参数,接着是默认参数,再是可变参数,最后是关键字参数和命名关键字参数。了解并熟练掌握这些参数传递方式,能够帮助你编写出更加高效和易于理解的代码。
2020-09-19 上传
2020-09-21 上传
2020-09-18 上传
2020-12-26 上传
2020-09-20 上传
2021-01-20 上传
2020-09-18 上传
2020-09-21 上传
2020-09-18 上传
weixin_38724333
- 粉丝: 5
- 资源: 955
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库