-> `{0:1.3f}` (для каждого значения можно свой) 3f - кол-во знаков после запятой в float, `{0:10.3f}` 10 - будет пробел - подставить вместо {} в таблице
# integer numbers with minimum width
print("{:5d}".format(12))
# width doesn't work for numbers longer than padding
print("{:2d}".format(1234))
# padding for float numbers
print("{:8.3f}".format(12.2346))
# integer numbers with minimum width filled with zeros
print("{:05d}".format(12))
# padding for float numbers filled with zeros
print("{:08.3f}".format(12.2346))
Подробнее о примере в источнике: https://pythonstart.ru/string/strokoviy-metod-format-python
- без возращаемого значения (без `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 x<stop:
res+=[x]
x+=step
elif step <0:
x=start
while x>stop:
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
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
# для вывода нужно записать все аргументы, иначе eror, но если задать в параметрах c=None, то можно не писать аргумент, параметр становится опциональным
Каждая из этих конструкций используется для распаковки аргументов соответствующего типа, позволяя вызывать функции со списком аргументов переменной длины.
- Например — функция, которая умеет выводить результаты, набранные учеником в тесте:
- Конструкцию **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')