|
@@ -0,0 +1,102 @@
|
|
|
+Docstring - строка документирования.
|
|
|
+
|
|
|
+Вызывается:
|
|
|
+```python
|
|
|
+help(abs)
|
|
|
+abs.__doc__
|
|
|
+```
|
|
|
+В языках со строгой типизация (Python) с объектами определенных типов можно производить только ограниченный набор действий.
|
|
|
+
|
|
|
+~={magenta}В Python динамическая строгая типизация.=~
|
|
|
+
|
|
|
+<h5>Аннотация типов в Python</h5>
|
|
|
+```python
|
|
|
+numbers: list = [] # переменная numbers хранит список
|
|
|
+languages: dict = {} # переменная languages хранит словарь
|
|
|
+temperature: tuple = (1, 2, 3) # переменная temperature хранит кортеж
|
|
|
+letters: set = set('hello') # переменная letters хранит множество
|
|
|
+```
|
|
|
+Для указания нескольких типов данных можно использовать ~={magenta}Union=~
|
|
|
+```python
|
|
|
+from typing import Union
|
|
|
+
|
|
|
+def add_numbers(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
|
|
|
+ return a + b
|
|
|
+
|
|
|
+param: int | float | str
|
|
|
+```
|
|
|
+
|
|
|
+Можно использовать ~={magenta}Optional=~. В данном случае указывается, что список может быть None.
|
|
|
+
|
|
|
+```python
|
|
|
+from typing import Optional
|
|
|
+
|
|
|
+num: Optional[int] = None
|
|
|
+```
|
|
|
+
|
|
|
+```python
|
|
|
+def append_to_list(value, my_list: Optional[list] = None):
|
|
|
+ if my_list is None:
|
|
|
+ my_list = []
|
|
|
+ my_list.append(value)
|
|
|
+ return my_list
|
|
|
+```
|
|
|
+
|
|
|
+Объект ~={magenta}Any=~ указывает на любой тип данных.
|
|
|
+
|
|
|
+```python
|
|
|
+from typing import Optional, Any, List
|
|
|
+
|
|
|
+def append_to_list(value: Any, my_list: Optional[list] = None) -> List[Any]:
|
|
|
+ if my_list is None:
|
|
|
+ my_list = []
|
|
|
+ my_list.append(value)
|
|
|
+ return my_list
|
|
|
+```
|
|
|
+
|
|
|
+<h5>Аннотация элементов кортежа</h5>
|
|
|
+```python
|
|
|
+from typing import Tuple
|
|
|
+
|
|
|
+# Кортеж может содержать элементы разных типов
|
|
|
+words: Tuple[str, int] = ("hello", 300)
|
|
|
+
|
|
|
+# Кортеж может содержать неизвестное количество элементов типа str
|
|
|
+words: Tuple[str, ...] = ("hello", "world", '!')
|
|
|
+```
|
|
|
+<h5>Аннотация словарей</h5>
|
|
|
+Здесь функция `foo` принимает один аргумент `bar`, он должен являться словарем, у которого ключи могут быть либо строкой либо целым числом, а значения могут быть либо пустыми (тип `None`) , либо строкой
|
|
|
+
|
|
|
+```python
|
|
|
+from typing import Dict, Optional, Union
|
|
|
+
|
|
|
+def foo(bar: Dict[Union[str, int], Optional[str]]) -> bool:
|
|
|
+ return True
|
|
|
+```
|
|
|
+
|
|
|
+~={green}Аннотации в Python с версии 3.9=~
|
|
|
+```python
|
|
|
+
|
|
|
+# Замена typing
|
|
|
+word: list[str] = ['hello', 'world']
|
|
|
+numbers: list[float] = [1.1, 3.0, 4.5]
|
|
|
+letters: set[str] = set('hello')
|
|
|
+digits: frozenset[int] = frozenset([1, 2, 2, 1])
|
|
|
+
|
|
|
+# Замена Union
|
|
|
+param: int | float | bool
|
|
|
+
|
|
|
+# Замена Optional
|
|
|
+param: int | None = None
|
|
|
+word: str | None = None
|
|
|
+
|
|
|
+# Аннотация словарей
|
|
|
+person: dict[str, str] = { "first_name": "John", "last_name": "Doe"}
|
|
|
+
|
|
|
+# Аннотация кортежей
|
|
|
+words: tuple[str, int] = ("hello", 300)
|
|
|
+
|
|
|
+#
|
|
|
+def foo(bar: dict[str | int, str | None]) -> bool:
|
|
|
+ return True
|
|
|
+```
|