Code from second seminar.

Here are examples of *functions* and *higher-order functions*.
All signatures of functions are annotated with types and could
be typechecked with mypy or pyright.
practice4
Aleksey Zubakov 2 years ago
parent 763c4fffd2
commit f972303c98
  1. 3
      02/01.py
  2. 5
      02/02.py
  3. 37
      02/03.py
  4. 19
      02/04.py
  5. 31
      02/README.md
  6. 19
      02/main_01.py

@ -0,0 +1,3 @@
from main_01 import is_prime
print(is_prime(17))

@ -0,0 +1,5 @@
def square(x: int) -> int:
pass
square("asdasd")

@ -0,0 +1,37 @@
import doctest
from typing import Callable
# term :: int -> int
def cube(x: int) -> int:
"""
Evaluates cube of given number.
>>> cube(3)
27
>>> cube(5)
125
"""
return x * x * x
# term :: int -> int
def summation(
n: int,
term: Callable[[int], int],
) -> int:
"""
Sums first n numbers of series.
>>> summation(5, cube)
225
>>> summation(5, lambda k: 8 // ((4 * k - 3) * (4 * k - 1)))
2
"""
total = 0
for k in range(1, n + 1):
total += term(k)
return total
if __name__ == "__main__":
doctest.testmod()

@ -0,0 +1,19 @@
from typing import Callable, Tuple
type_F = Callable[[int], int]
def factory(total: int) -> Tuple[type_F, type_F]:
def adder(k):
return k + total
def subtractor(k):
return total - k
return adder, subtractor
if __name__ == "__main__":
add, min = factory(5)
print(add(1))
print(min(3))

@ -0,0 +1,31 @@
### Что здесь лежит?
- `01.py` и `main_01.py` демонстрируют как разбивать
код на отдельный файлы;
- `02.py` -- пример простой типизированной функции;
- `03.py`-- обобщение частичной суммы ряда с помощью функций;
- `04.py` -- примеры функций-замыканий;
### Как запускать?
Желательно установить [mypy](https://github.com/python/mypy) или даже
[pyright](https://github.com/microsoft/pyright) и проверять типизацию
ими перед запусками:
```sh
$ mypy *.py
```
или
```sh
$ mypy 01.py
```
`01.py` и `02.py` можно запустить, как и в прошлый раз:
```sh
$ python 01.py
```
Если файл содержит doctest _(прим.: пример в комментарии к функции; да, он
рабочий)_, добавьте флаг `-v` в конце:
```sh
$ python 03.py -v
```

@ -0,0 +1,19 @@
def is_prime(n: int) -> bool:
"""
>>> is_prime(10)
True
>>> is_prime(17)
True
>>> is_prime(21)
False
"""
for el in range(2, n):
if n % el == 0:
return False
return True
if __name__ == "__main__":
import doctest
doctest.testmod()
Loading…
Cancel
Save