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 (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
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user