Skip to content

Commit 751b1ec

Browse files
committed
udpate content
Signed-off-by: Kirill Mokevnin <mokevnin@gmail.com>
1 parent 7693882 commit 751b1ec

5 files changed

Lines changed: 68 additions & 55 deletions

File tree

modules/40-define-functions/500-named-arguments/ru/EXERCISE.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
2-
Реализуйте функцию `trim_and_repeat()`, которая принимает три параметра: строку, `offset` — число символов, на которое нужно обрезать строку слева и `repetitions` — количество обрезанных строк, которые нужно вывести. Функция обрезает строку и повторяет ее столько раз, чтобы общее количество обрезанных строк равнялось `repetitions`. Функция должна записать результат в одну строку и вернуть его.
3-
Число символов для среза по умолчанию равно 0, а повторений — 1.
1+
Реализуйте функцию `trim_and_repeat()`, которая принимает три параметра: строку, `offset` — число символов, на которое нужно обрезать строку слева и `repetitions` — количество обрезанных строк, которые нужно вывести. Функция обрезает строку и повторяет ее столько раз, чтобы общее количество обрезанных строк равнялось `repetitions`. Функция должна записать результат в одну строку и вернуть его. Число символов для среза по умолчанию равно 0, а повторений — 1.
42

53
```python
64
text = 'python'
Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,36 @@
1-
В этом уроке разберем, какие параметры существуют, чем они отличаются и в каких случаях их применять.
1+
Функции в Python можно вызывать по`разному. До этого мы передавали значения строго по порядку: первое значение шло в первый параметр, второе — во второй и так далее. Такой способ называется **позиционным вызовом**.
22

3-
**Аргументы** — это данные, которые передаются в вызов функции. Они бывают двух типов:
4-
5-
Первый тип — **позиционные аргументы**. Они передаются в том же порядке, в котором определены параметры функции:
3+
Но в Python есть ещё один вариант — **именованные аргументы**. При вызове функции мы явно указываем имя параметра, которому передаём значение. Он особенно удобен, когда у функции много параметров или не все из них нужно менять — тогда можно указать только нужные по имени, а остальные оставить со значениями по умолчанию.
64

75
```python
8-
# (text, length)
9-
truncate('My Text', 3)
10-
```
11-
12-
Второй тип — **именованные аргументы**. Они передаются не просто как значения, а как пара «имя=значение». Поэтому их можно передавать в любом порядке:
6+
def repeat(text, times=1):
7+
return text * times
138

14-
```python
15-
# Аргументы переданы в другом порядке
16-
truncate(length=3, text='My Text')
9+
repeat("Hi", 3) # позиционный вызов
10+
repeat(text="Hi", times=3) # именованный вызов
1711
```
1812

19-
Если внимательно посмотреть на два примера выше, то можно понять, что это две одинаковые функции.
20-
21-
Теперь разберемся, в каких случаях нужно применять эти типы аргументов.
22-
23-
Выбор типа параметра зависит от того, кто вызывает функцию.
13+
Оба варианта делают одно и то же. Но во втором случае мы явно написали, что "Hi" — это text, а 3 — это times. С точки зрения определения функции ничего не поменялось, именованные аргументы могут использоваться для любой функции, сама функция об этом ничего не знает. Она получает значения, так как они описаны в определении.
2414

25-
Есть две причины использовать именованные аргументы:
15+
Именованные аргументы можно указывать в любом порядке. Это не меняет результат работы функции, потому что значения связываются именно по имени параметра.
2616

27-
* Они повышают читаемость, так как сразу видно имена
17+
```python
18+
repeat(times=3, text="Hi") # => HiHiHi
19+
```
2820

29-
* Можно не указывать все промежуточные параметры, которые нам сейчас не нужны
21+
## Когда использовать именованные аргументы
3022

31-
Последнее полезно, если у функции много необязательных параметров. Посмотрим на примере:
23+
Именованные аргументы полезны, когда у функции есть несколько параметров и не все из них нужно менять. В таких случаях можно указать только те параметры, которые действительно важны в конкретном вызове, а остальные оставить со значениями по умолчанию.
3224

3325
```python
34-
def print_params(a=1, b=2, c=3, d=4):
35-
print(a, b, c, d)
26+
def make_line(symbol="-", length=10):
27+
return symbol * length
3628

37-
# Нужно передать только d, но приходится передавать все
38-
f(1, 2, 3, 8)
29+
make_line() # все параметры по умолчанию
3930

40-
# Именованные аргументы позволяют передавать только d
41-
# Для остальных аргументов используются значения по умолчанию
42-
f(d=8)
31+
make_line(length=5) # меняем только длину
32+
# Без этого пришлось бы писать так
33+
make_line("-", 5)
4334
```
4435

45-
Именованные аргументы можно передавать одновременно с позиционными. Тогда позиционные должны идти в самом начале:
46-
47-
```python
48-
# Передаем только a (позиционно) и d (как именованный)
49-
f(3, d=3)
50-
```
36+
Нам не пришлось указывать явно символ, даже несмотря на то, что он идет в списке параметров раньше длины. Это также делает вызовы функций более понятными для чтения: сразу видно, какое именно значение относится к какому параметру.

modules/40-define-functions/600-type-annotations/ru/EXERCISE.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Реализуйте функцию `word_multiply()`. Она должна принимать два параметра:
32

43
* Строку
Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,64 @@
1-
**Аннотации типов** — это возможность указать типы параметров и возвращаемое значение у функции в Python. Это не является обязательным требованием языка, но может помочь программистам в дальнейшей разработке, улучшить читаемость кода и повысить его надежность.
1+
В Python в функцию можно передать любые значения. Иногда это усложняет понимание кода: не всегда ясно, что именно ожидает функция и что она возвращает.
22

3-
Давайте рассмотрим простой пример функции без аннотаций типов:
3+
Чтобы сделать код понятнее, в Python есть **аннотации типов**. С их помощью можно явно указать, какие значения принимает функция и какой результат она возвращает. Эти подсказки полезны в редакторах кода: они показывают ожидаемые типы аргументов и помогают быстрее разобраться, как пользоваться функцией.
4+
5+
## Как указывать типы параметров
6+
7+
Аннотация функции описывает два элемента:
8+
9+
1. **Типы параметров** — указываются прямо в определении функции после имени каждого параметра через двоеточие.
10+
2. **Тип возвращаемого результата** — указывается после списка параметров с помощью стрелки ``>`.
11+
12+
Разберем на примере функции, которая вычисляет сумму двух переданных значений:
413

514
```python
6-
def concat(first, second):
7-
return first + second
15+
def add(a: int, b: int) -> int:
16+
return a + b
17+
18+
print(add(2, 3)) # => 5
819
```
920

10-
Эта функция конкатенирует две строки в одну. При этом с первого взгляда на код сложно понять, что происходит в нем: какие типы у аргументов, почему функция работает со строками, а не складывает, например, два числа.
21+
Теперь редактор кода будет подсказывать, что функция `add` принимает два числа и возвращает число. Если попытаться передать строку, редактор подсветит это как проблему и предупредит.
22+
23+
## Какие типы используются в аннотациях
1124

12-
Если в дальнейшем использовать эту функцию в коде, то может возникнуть необходимость проверять типы аргументов перед передачей их в функцию, что увеличивает объем кода и затрудняет его понимание.
25+
На этом этапе достаточно знать аннотации для простых, примитивных типов данных:
1326

14-
Теперь давайте добавим аннотации типов к функции:
27+
* `int` — целые числа
28+
* `float` — числа с плавающей точкой
29+
* `str` — строки
30+
* `bool` — логические значения (True или False)
1531

1632
```python
17-
def concat(first: str, second: str) -> str:
18-
return first + second
33+
def describe(name: str, age: int, height: float) -> str:
34+
return f"{name}, {age} лет, рост {height}"
35+
36+
print(describe("Anna", 25, 1.70))
37+
# => Anna, 25 лет, рост 1.7
1938
```
2039

21-
Здесь мы указали, что аргументы `first` и `second` должны быть строкового типа (`str`). Возвращаемое значение тоже будет строковым. Когда мы будем использовать эту функцию в коде, нам будет проще понять, какие типы аргументов можно передавать и какой тип возвращаемого значения ожидается.
40+
## Пример с параметрами по умолчанию
2241

23-
Аннотации типов также могут быть использованы для определения типов переменных внутри функции. Например:
42+
Аннотации работают одинаково как для обязательных параметров, так и для тех, у которых есть значение по умолчанию. Сначала указывается тип, потом через `=` — стандартное значение.
2443

2544
```python
26-
def double(n: int) -> int:
27-
result: int = n * 2
28-
return result
45+
def greet(name: str, greeting: str = "Hello") -> str:
46+
return f"{greeting}, {name}"
47+
48+
print(greet("Anna")) # => Hello, Anna
49+
print(greet("Kirill", "Hi")) # => Hi, Kirill
2950
```
3051

31-
В этом примере мы определили тип переменной `result` как `int`, используя аннотацию типа.
52+
В этом примере `name` — обязательный параметр, а `greeting` имеет значение по умолчанию. Аннотации показывают типы обоих параметров и возвращаемого результата.
53+
54+
## Аннотации и проверка кода
55+
56+
Хотя сам Python не проверяет аннотации во время выполнения программы, есть отдельные инструменты, которые умеют это делать. Такой подход называют **статической проверкой кода**.
57+
58+
"Статическая" значит, что проверка происходит ещё до запуска программы. Инструмент читает исходный код и сверяет, соответствуют ли переданные значения указанным типам.
59+
60+
Например, если функция принимает строку, а вы передадите число, то при статической проверке это будет показано как ошибка.
61+
62+
Особенно удобно, когда такие ошибки подсвечивает редактор прямо во время написания кода. Это позволяет сразу увидеть проблему и исправить её, не дожидаясь запуска программы. Благодаря этому в работающем коде становится меньше неожиданных ошибок — многие из них отлавливаются заранее.
3263

33-
Аннотации типов — это не строгая проверка типов в Python. Их использование не гарантирует, что функция будет вызвана с аргументами и возвращаемым значением указанных типов. Все таки Python остается динамически типизированным языком. В нем аннотации типов не влияют на возможность передачи аргументов различных типов или возвращения значений других типов. Тем не менее их использование упрощает чтение и понимание кода и помогает отслеживать ошибки.
64+
Аннотации типов не являются обязательными. Функции можно писать и без них — Python всё равно будет работать. Но когда аннотации есть, код становится понятнее для людей и удобнее для редакторов. Нужно ли аннотировать функции в своем коде? Да, это считается хорошей практикой.

modules/45-logic/10-bool-type/ru/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Кроме арифметических операций в математике есть операции сравнения, например, `5 > 4` или `3 < 1`. Они есть и в программировании. Допустим, когда мы заходим на сайт, введенные логин и пароль сравниваются с теми, какие есть в базе. Если они есть, нас пускают внутрь — аутентифицируют. В этом уроке разберем операции сравнения.
32

43
Языки программирования адаптировали все математические операции сравнения в неизменном виде, кроме операторов равенства и неравенства. В математике для этого используется обычное равно `=`, но в программировании такое встречается редко.

0 commit comments

Comments
 (0)