add new info about args kwargs
This commit is contained in:
parent
5a602cc546
commit
990a68bfe7
@ -424,9 +424,193 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо
|
|||||||
print ('Hello' + name + '!')
|
print ('Hello' + name + '!')
|
||||||
print (greeting ... ('Jack')) -> Hello Jack!
|
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
|
## Методы build-in method
|
||||||
ВИД: ``x.append()``
|
ВИД: ``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
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user