add new info about args kwargs

This commit is contained in:
Yesen 2023-10-24 13:31:55 +03:00
parent 5a602cc546
commit 990a68bfe7

View File

@ -424,9 +424,193 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо
print ('Hello' + name + '!')
print (greeting ... ('Jack')) -> Hello Jack!
```
### Возвращенная функция
- сумма двух чисел
```python
def sum_two_num (a,b):
return a+b
x = sum_two_num (1,1)
print (x) -> 2
```
- Поиск слова в тексте
```python
def is_hello_in_text (text):
if 'hello' in text.lower():
return True
else:
return False
print (is_hello_in_text('Say hello'))
ИЛИ
def is_hello_in_text('Say hello'):
return 'hello' in text lower()
print (is_hello_in_text ('Hello everyone!'))
```
- Поиск (сочетания) букв в тексте
```python
def is_string_in_text (string, text):
return string in text
print (is_string_in_text('he','The apple')) -> True
```
```python
def greeting_depends_on_gender(name, gender):
if gender == 'male':
print ('Hello '+ name + '! You are look great!')
return gender # return пишем в конце цикла, после него ничего в текущ. цикле не ставим
elif gender == 'female':
print ('Hello ' + name + '! You are so nice!')
return gender
else:
print ('Hello ' + name + "! I've never see the creture like you!")
return_value = greeting_depends_on_gender ('Jack', 'male')
```
## Методы build-in method
ВИД: ``x.append()``
## *Args, **kwargs
### Позиционные (positional) и именованные (keyword) аргументы
- Здесь каждый параметр относится к каждому аргументу
```python
def printThese(a,b,c): # это параметры
print(a, "is stored in a")
print(b, "is stored in b")
print(c, "is stored in c")
printThese(1,2,3) # это аргументы
# для вывода нужно записать все аргументы, иначе eror, но если задать в параметрах c=None, то можно не писать аргумент, параметр становится опциональным
"""
1 is stored in a
2 is stored in b
3 is stored in c
"""
```
- Опциональные параметры можно использовать для назначения аргументов
```python
def printThese(a=None,b=None,c=None):
print(a, "is stored in a")
print(b, "is stored in b")
print(c, "is stored in c")
printThese(c=3, a=1) # Порядок можно ставить как угодно, но вывод все равно последовательный
"""
1 is stored in a
None is stored in b #Ничего не указали, поэтому None
3 is stored in c
"""
```
```python
def func_kwargs(**kwargs):
print(kwargs)
func_kwargs(first=1,second=2,third=3) -> {'first':1,'second':2,'third':3}
```
### Оператор '*'
Этот оператор позволяет «распаковывать» объекты, внутри которых хранятся некие элементы. Пример:
```python
a = [1,2,3]
b = [*a,4,5,6]
print(b) -> [1,2,3,4,5,6]
```
### Использование *args, **kwargs
- __*args__ — это сокращение от «arguments» (аргументы),
- __**kwargs__ — сокращение от «keyword arguments» (именованные аргументы)
Каждая из этих конструкций используется для распаковки аргументов соответствующего типа, позволяя вызывать функции со списком аргументов переменной длины.
- Например — функция, которая умеет выводить результаты, набранные учеником в тесте:
```python
def printScores(student, *scores):
print(f"Student Name: {student}")
for score in scores:
print(score)
printScores("Jonathan",100, 95, 88, 92, 99) # 'student'- аргумент, 'scores' - именной аргумент
"""
Student Name: Jonathan
100
95
88
92
99
"""
```
- Для **kwargs аргументов создается словарь, в котором содержатся именованные аргументы
```python
def printPetNames(owner, **pets):
print(f"Owner Name: {owner}")
for pet,name in pets.items():
print(f"{pet}: {name}")
printPetNames("Jonathan", dog="Brock", fish=["Larry", "Curly", "Moe"], turtle="Shelldon")
"""
Owner Name: Jonathan
dog: Brock
fish: ['Larry', 'Curly', 'Moe']
turtle: Shelldon
"""
```
- Конструкцию **kwargs нельзя располагать до *args. Если это сделать — будет выдано сообщение об ошибке.
- *x в списке формальных аргументов — обозначает, что принимается произвольное число аргументов, которые в теле процедуры будут доступны в кортеже под именем x. (slurp)
- *x в вызове процедуры — обозначает, что коллекция x распаковывается подставляется как отдельные аргументы. (splat)
Пример:
```python
first, *rest = 1, 2, 3, 4
print(rest)
# [2, 3, 4]
ИЛИ списки
first, *rest = [1, 2, 3, 4]
print(rest)
# [2, 3, 4]
```
- Нахождение 10 проуентов от произведения параметров обычным образом
```python
def ten_perc(x,y)
return (x*y) * 0,1 # 10 процентов от произведения x и y
ten_perc(10,20) -> 20.0
```
-
```python
def ten_perc(*args):
print(args)
ten_percent (10,20,7,2) -> (10,20,7,2) # tuple
```
```python
def ten_perc (*args):
product=1
for num in args:
product=product*num
return product*(0.1)
print(ten_perc(10,20))
```
- использование {} .format c kwargs
```python
def hello_kwargs(**kwargs):
if name is kwargs:
print('Hello! Nice to meet you, {}'.format(kwargs['name'])) # ключ 'name' должен быть str
else:
print('Hello! What is your name?')
hello_kwargs (gender = male, age = 24, name ='Jack') -> Hello! Nice to meet you, Jack
```
```python
def hello_kwargs(greeting,**kwargs):
if 'name' in kwargs:
print('{}! Nice to meet you, {}'.format(greeting, kwargs,['name'])) # на первом месте позиционный пар-р (greeting)
else:
print ('{}! What is your name?'.format(greeting))
hello_kwargs('Hi', gender = 'male', name = 'Jack')
```
```python
def func_args_kwargs (*args,**kwargs):
print(args)
print(kwargs)
func_args_kwargs('one','two', drink = 'coffee', food = 'sandwich')
print ('i would like to {}{}'.format(args[0],kwargs['food'])) -> I would like one sandwich
```
## Лямбда выр.функции
```python
def sum_of_two_num(x):
return x + x
```