summaryrefslogtreecommitdiff
path: root/PYTHON/-args, --kwargs.md
blob: 22029c2475a7089e28cf0049644634cbd5f5a70c (plain)
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, читаемый код**