From 990a68bfe7a83bc5adb3904c8e44ba330daf0e49 Mon Sep 17 00:00:00 2001 From: Yesen Date: Tue, 24 Oct 2023 13:31:55 +0300 Subject: [PATCH] add new info about args kwargs --- docs/python/defolt_python.md | 186 ++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/docs/python/defolt_python.md b/docs/python/defolt_python.md index db56652..ab5726b 100644 --- a/docs/python/defolt_python.md +++ b/docs/python/defolt_python.md @@ -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 +```