python3xiaobaike_2020/chapter5/5-6 python3小白课:参数收集.md
2025-04-20 23:22:14 +08:00

101 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课参数收集
### 普通参数收集
python跟很多编程语言一样支持定义个数可变的参数这样定义起来很方便也能支持处理多个传入的参数。
在定义形参的时候,我们可以在形参前面添加一个`*`星号用来表示这个形参支持接收多个参数值,多个参数值会自动组装成元组并传入,在函数内部我们就可以使用处理元组的方式来处理传入参数了。
```python
# coding:utf-8
def info(name, *nickname):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
info("小白", "little bai", "白白", "小白白", "超级白")
```
这里我们使用了f-string来格式化文本这里的第一个参数被赋值给`name`这个形参,而后面不论增加赋值多少个参数,都会组合成元组,赋值给`nickname`,需要注意的是,在函数内部调用`nickname`的时候,不需要带`*`号。
> [!danger]
>
> 这种带一个`*`号的能收集参数的形参在同一个函数中仅能定义一个,因为多了解释器就不好识别并自动分配了。
这样的形参还能放在前面,我们看个例子:
```python
# coding:utf-8
def info(*nickname, name):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
info("little bai", "白白", "小白白", "超级白", name="小白")
```
由于加`*`的形参支持读取可变个数的参数因此其他的参数解释器默认不能正常找到如果我们要赋值给name参数就必须使用关键字参数而关键字参数需要在调用参数的最后来写所以就写成了我们上述代码的样子。
---
### 关键字参数收集
除了之前一个`*`的普通关键字收集python函数在定义时还支持在形参前加两个`*`号,即`**形参名`,这样写后,会将传入的关键字参数收集成字典,在函数内部可以调用。
> [!danger]
>
> 同样的,在同一个函数定义中,也只允许有一个关键字参数收集的参数定义。
>
> 不过,关键字参数的收集可以跟普通参数收集同时存在。
具体的使用大家可以根据自己的业务场景来设计,我们来看个简单的使用。
```python
# coding:utf-8
def info(name, *nickname, **score):
print(f"您的名字为:{name}")
print(f"您的昵称有这些:{nickname}")
print(f"您的成绩为:{score}")
info("小白", "little bai", "白白", "小白白", "超级白", 语文=89, 数学=99)
```
你也可以在函数内部使用字典的方法来获取内容。
---
### 逆向参数收集
除了前面讲的正向的参数收集python函数定义还支持逆向参数收集。
```python
# coding:utf-8
def info(name, nickname):
print(f"您的名字为:{name}")
print(f"您的昵称为:{nickname}")
a = ["小白", "白白"]
info(*a)
```
我们再来看一个传入字典的逆向收集。
```python
# coding:utf-8
def info(name, nickname, score):
print(f"您的名字为:{name}")
print(f"您的昵称为:{nickname}")
print(f"您的成绩为:{score}")
a = {
"name": "小白",
"nickname": "白白",
"score": 94
}
info(**a)
```
这样函数就会自动寻找字典中的键来匹配了。我尝试了一下,如果字典中多定义一个键,发现会报错的。所以函数需要哪几个,就传入哪几个键的字典就好了。
### 单词释义
| 单词 | 释义 |
| -------- | ---------- |
| nickname | 昵称,外号 |
| name | 姓名 |
| score | 成绩 |