1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
**args**, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs** используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
```python
# Пример *args
def sample( *args) :
print(args)
sample( 'time', 1, True)
# Пример **kwargs
def sample(**kwargs) :
print(kwargs)
sample(a = 'time', b = 1)
```
====================================
В Python можно распаковывать коллекции в аргументы или структуры — это мощно.
```python
#_***args и kwargs — собирают аргументы:_
def f(*args, **kwargs):
print(args, kwargs)
f(1, 2, x=10) # (1, 2), {'x': 10}
# 👍 _* и ** — распаковывают:_
nums = [1, 2, 3]
print(*nums) # 1 2 3
params = {"sep": " | "}
print(1, 2, 3, **params) # 1 | 2 | 3
#_Распаковка в переменные:_
a, *middle, b = [1, 2, 3, 4, 5]
print(middle) # [2, 3, 4]
```
**Где применять: передача параметров, адаптация API, читаемый код**
|