From 15486cba2983f2168aea131ce56fa54fa82b9db6 Mon Sep 17 00:00:00 2001 From: Yesen Date: Thu, 26 Oct 2023 16:29:46 +0300 Subject: [PATCH] add new functions to the default file --- docs/python/defolt_python.md | 252 +++++++++++++++++++++++++++++++++-- 1 file changed, 238 insertions(+), 14 deletions(-) diff --git a/docs/python/defolt_python.md b/docs/python/defolt_python.md index ab5726b..ea74f7f 100644 --- a/docs/python/defolt_python.md +++ b/docs/python/defolt_python.md @@ -282,7 +282,7 @@ for x in range(k,n,l): # n не включено 3,11,2 (k+l)+l # 5+2 = 7 ... # n не включено, 9 stop ``` -- для перебора цифр и заключение их в список +- для перебора цифр и заключение их в список (генератор списка `[for]`) ```python list = [num for num in range(0,10)] # первый num можно опустить print (list) -> [0,1,2,3...9] # 10 не вкл @@ -330,16 +330,6 @@ for index, letters in enumerate(my_str): print (letter + 'is at index' + str(index)) ``` -### Различные функции ---- -- `min()` | `max()` -```python -print (min(1,2,3,4)) -> 1 -``` -- `min()` | `max()` работают также с листами по аскикоду -```python -print(max('Hello')) -> o # по аскикоду о = 111 -``` #### Добавление библиотек - Добавление предустановленных библиотек ```python @@ -400,7 +390,119 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо ## Функции - код, кот. вып. фун-цию и назван именем ВИД: ``set()`` + + Виды: + - без возращаемого значения (без `return`, справочное) + - без параметров (`def():`) + - произвольные число параметров (`def min(*a)`) + ```python + def min(*a): + m=a[0] + for x in a: + if m>x: + m=x + return m + ``` + - параметры со значениями по умолчанию (`print(a,end='')`) + - пример функции, которая показывает сколько эл-тов между числами + ```python + def my_range(start,stop,step=1): # Знак равно - это необязательный пункт, тут шаг необязательно вводить + res=[] + if step >0: + x= start + while xstop: + res+=[x] + x+=step + return res + ``` + ### Различные функции и методы + --- + - `min()` | `max()` + ```python + print (min(1,2,3,4)) -> 1 + ``` + - `min()` | `max()` работают также с листами по аскикоду + ```python + print(max('Hello')) -> o # по аскикоду о = 111 + ``` + --- + - метод `.reverse()` и ф-я `reversed()` - нужны чтобы сделать обратный порядок эл-тов [::-1] + ```python + list = [1,2,3,4,5] + print (list.reverse()) -> [5,4,3,2,1] + ``` + > метод `.reverse()` + - не возвращает новый списокб изменяет существующий + - применяется только к изменяемым посл-тям + > ф-я `reversed()` + - применяется ко всем посл-тям (строки, списки, кортежи(tuple) и диапазоны(range)) + - возвращает обратный итератор, а не изменяет, т.е. чтобы вывести нужно сконвертировать в нужный тип + ```python + # список + my_list = [1, 2, 3, 4, 5] + reversed_list = list(reversed(my_list)) + print(reversed_list) -> [5, 4, 3, 2, 1] + # кортеж + my_tuple = (1, 2, 3, 4, 5) + reversed_tuple = tuple(reversed(my_tuple)) + print(reversed_tuple) -> (5, 4, 3, 2, 1) + # строка + my_string = "Hello, world!" + reversed_string = ''.join(reversed(my_string)) + print(reversed_string) -> !dlrow ,olleH + ``` + --- + - Удаление эл-тов из списка ``del``, ``.pop()``, ``.remove()`` + > `del` + `list [index]` + ```python + users = ['Ваня', 'Коля', 'Маша'] + del users [0] # удаляем ваню + print (users) -> ['Коля', 'Маша'] + ``` + > метод `.pop()` - удаляет последний эл-т из списка, но возвращает его + - также можно удалять по индексу `.pop(index)` + > метод `.remove()` - удаление по значению (только первое которое нашел, чтобы удалить все - исп цикл) + - не возвращает + ```python + users = ['Иванов', 'Сидоров', 'Петров', 'Иванов'] + users.remove('Петров') + ``` + --- + - Функция strip() - для возврата копии исходной строки путем удаления начальных и конечных пробелов, символов (в качестве аргументов), переданных в функцию strip(). + `strip( 'characters' )` + - если не ставить параметр `chars` , то удалит начальные и конечные пробелы из строки + - если поставить, то удалит выбранные символы + - возвращает копию исходной строки + ```python + strinput = " $$$$$ No. 1 Welcome to JAVATPOINT!! No. 1 $$$ " + # use strip() function to remove the set of characters + res = strinput.strip ( ' $No. 10 !' ) # store result into res variable + print ( " Given string is: ", strinput) + print ( " After removing the set of characters: ", res) + + ИЛИ символы + + str5 = '++++++Python Programming Tutorial****** $$$$$' + print ("n Given string is = ", str5) + # use strip function to remove the symbols from both ends + str6 = str5. strip ( ' $*+' ) + print (" Stripping the '+', '*' and '$' symbols on both sides of the string is = ", str6) + ``` + + + ### Создание функций + Синтаксис : `def` название фунц(аргументы) + - можно использовать рез-т функции в этой же функции: + ```python + m = min2(42,30) # функция минимума 2 чисел + m = min2(min2(42,30),25) + ``` ```python def print_greeting(): ''' # доксрин @@ -424,6 +526,15 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо print ('Hello' + name + '!') print (greeting ... ('Jack')) -> Hello Jack! ``` + ```python + def f(n): + return n * 10 + 5 + print(f(f(f(10)))) -> 10555 + # f(10) -> 100+5=105 + #f(105) -> 1055 + #f(1055) -> 10555 + ``` + ### Возвращенная функция - сумма двух чисел ```python @@ -465,6 +576,56 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо print ('Hello ' + name + "! I've never see the creture like you!") return_value = greeting_depends_on_gender ('Jack', 'male') ``` + ### Локальные переменные внутри функции + - параметры внутри функции __локальные__, мы не можем пользоваться ими вне функции + - изменение значений, например, списка + ```python + def append_zero(xs): + xs.append(0) + # xs= [100]- новый список, поэтому не повлияет на a + a =[] + append_zero(a) + print(a) -> [0] + ``` + - также мы можем изменять данные из глобального списка внутри локального: + ```python + l= [1, 3, 4, 5] # глобальная переменная l с сущ. списком + def modify_list(l): + for i in range(len(l))[::-1]: # делаем в обратном порядке, чтобы избежать ошибки IndexError: list index out of range, которая практически запрограммирована при удалении элементов из списка во время итерирования по нему. + # после удаления элемента длина списка уменьшается а кортеж созданный range по длине списка остается неизменным и когда i принимает значение больше чем оставшаяся длина вашего списка то и вылетает ошибка IndexError: list index out of range. + # for i in reversed(range(len(l))): --> есть еще такой вариант с функцией `reversed()` + if l[i] %2 !=0: # если i нечетное ,то + l.remove(l[i]) # удаляем его из списка l + else: + l[i] = l[i]//2 # иначе оно четное , значит делим его на 2 + modify_list(l) # выдаст None, т.к. задачей было не возвращать никаких значений + print(l) # выдаст - > [2] , т.е. изменили глобальную переменную l + + ИЛИ + + l = [1,2,3,4] + def modify_list(l): + l[:] = [i//2 for i in l if not i % 2] # генератор списка с условием (есть в конспекте) + # not здесь говорит, что остатка НЕ будет. Т.е при деление на 2, число без остатка, добавляют в копию списка + # L[:] - срез списка от начала до конца , если без [:], то глоб. L будет ссылаться на новый обьект, при этом исчезнут старые значения + modify_list(l) # выдаст None, т.к. задачей было не возвращать никаких значений + print(l) # выдаст - > [1,2] , т.е. изменили глобальную переменную l + ``` + + ### Глобальные переменные + - переменные, которые обьявлены все всяких функций + ```python + def print_value(): + print(a) # не обьявлена внутри функции, т.е нет a= 5 + a = 5 + print_value() -> 5 + ``` + ```python + def print_value(): + print + ``` + + ## Методы build-in method ВИД: ``x.append()`` @@ -478,8 +639,7 @@ randint (1,10) -> 6 # Выбирает любое число по диапазо print(b, "is stored in b") print(c, "is stored in c") printThese(1,2,3) # это аргументы - - # для вывода нужно записать все аргументы, иначе eror, но если задать в параметрах c=None, то можно не писать аргумент, параметр становится опциональным + # для вывода нужно записать все аргументы, иначе eror, но если задать в параметрах c=None, то можно не писать аргумент, параметр становится опциональным """ 1 is stored in a 2 is stored in b @@ -609,8 +769,72 @@ print ('i would like to {}{}'.format(args[0],kwargs['food'])) -> I would like on ``` ## Лямбда выр.функции - +- функция без имени, которая вызывается 1 раз +- `map` - обьекты записываются как mapobject exm: 0x105ba3610 ```python def sum_of_two_num(x): return x + x +num_list = [1,2,3,4,5,6,7] +result = map(sum_of_two_num, num_list) # sum...- функция, num... - посл-ть +print (result) -> mapobject at 0x105ba3610 ``` +- чтобы распаковать объекты `map`: +```python +for item in result: + print(item) -> 2 (1+1) + 4 (2+2) + 6 (3+3) + ... + 14 (7+7) +``` +```python +def cube(num): + return num **3 +num_list = [1,2,3,4,5,6,7] +print (list(map(cube(num_list)))) -> [1,8,27,64,125,216,343] +``` +- вариант решения задачи с `modify_list`, но с `lambda` +```python +def modify_list(l): + l[:] = [x // 2 for x in filter(lambda x: x & 1, l)] + +l = [10, 5, 8, 3] +print(l) +modify_list(l) +print(l) # [2, 1] +``` +## Конвертация одних типов в другие +> СПИСОК --->> СТРОКА +- распаковка списка с помощью `*list`: +```python +num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +print(*num) -> 0 1 2 3 4 5 6 7 8 9 10 +``` +- список строк -> `.join()` +```python +my_list = ["....ru", "-", "хороший", "сайт"] +print(" ".join(my_list)) # " " - пустое место- это разделитель дря строк +-> ....ru - хороший сайт +``` +- для списка чисел подойдет `.map()` для приведения всех цифр к строке и склеить их `.join()` +```python +my_list2 = [66, 77, 88, 99] +print(" ".join(map(str, my_list2))) -> 66 77 88 99 +``` +- чтобы делить с запятой shortcut кода +```python +my_list3 = [11, 22, 33, 44, 55] +print(str(my_list3).strip('[]')) # подробнее о .strip() в разделе функций +-> 11, 22, 33, 44, 55 +``` +> строку в список +```python +a = input().split(" ") +a = list(a) + +ИЛИ +list(string) + +ИЛИ +string.split() +``` \ No newline at end of file