Преамбула
Я использую метод write_excel Polars, у которого есть параметр columns_formats, которому нужен ColumnFormatDict, определенный здесь и нижеКод: Выделить всё
ColumnFormatDict: TypeAlias = Mapping[
# dict of colname(s) or selector(s) to format string or dict
Union[ColumnNameOrSelector, tuple[ColumnNameOrSelector, ...]],
Union[str, Mapping[str, str]],
]
ColumnNameOrSelector: TypeAlias = Union[str, SelectorType]
SelectorType: TypeAlias = "Selector"
Код: Выделить всё
df.write_excel(..., column_formats={"a":"#,##0;[Red]-#,##0"})
Если да:
Код: Выделить всё
column_formats = {"a":"#,##0;[Red]-#,##0"}
df.write_excel(..., column_formats=column_formats)
Код: Выделить всё
Argument of type "dict[str, str]" cannot be assigned to parameter "column_formats" of type "ColumnFormatDict | None" in function "write_excel"
Type "dict[str, str]" is not assignable to type "ColumnFormatDict | None"
"dict[str, str]" is not assignable to "Mapping[ColumnNameOrSelector | tuple[ColumnNameOrSelector, ...], str | Mapping[str, str]]"
Type parameter "_KT@Mapping" is invariant, but "str" is not the same as "ColumnNameOrSelector | tuple[ColumnNameOrSelector, ...]"
"dict[str, str]" is not assignable to "None"
Я обнаружил, что если я аннотирую свою переменную как
Код: Выделить всё
column_formats:dict[str|cs.Selector|tuple[str|cs.Selector], str]={"a":"abc"}
Вопросы:
- Почему в первом случае str является допустимым ColumnNameOrSelector | tuple[ColumnNameOrSelector, ...], но во втором случае это не так?
- Кроме того, предположим, что я хочу добавить PR для изменения ColumnNameOrSelector, есть ли способ определить его так, чтобы мое второе использование не генерировало предупреждение о типе без явной аннотации?
Код: Выделить всё
ColumnFormatDict: TypeAlias = Union[
Mapping[str, Union[str, Mapping[str, str]]],
Mapping[SelectorType, Union[str, Mapping[str, str]]],
Mapping[tuple[str|SelectorType, ...], Union[str, Mapping[str, str]]],
]
- Это предположение на правильном пути или нет?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -variables