Skip to content

PythonのList型ヒントが>3.9では非推奨となっている #297

@5kdn

Description

@5kdn

Python3.9の型ヒントでは list または list[any] を使用するようになっており、 List[any] 表記は非推奨となっています。

現状のジェネレーターでは、linterを使用している場合常にUndefined name List(Flake8 F821)等が出現してしまうため、修正をしたほうが良いのではないでしょうか。

後方互換性も考えられますが、現状のAtCoder環境ではCPython3.11.4であり、こちらに一致もしくは実行環境によって表示を切り替えるのが良いと思います。

atcodertools/codegen/code_generators/universal_generator/python.toml

base_indent = 1
insert_space_around_operators = true

# global変数宣言時の接頭辞
global_prefix = ""

# インデックス
[index]
i = "i"
j = "j"

# ループ
[loop]
header = "for {loop_var} in range({length}):"
footer = ""

# タイプ
[type]
int = "int"
float = "float"
str = "str"

# デフォルト値
[default]
int = "int()"
float = "float()"
str = "str()"

# 宣言
[declare]
int = ""
float = ""
str = ""
seq = ""
2d_seq = ""

# 確保
[allocate]
seq = "{name} = [{default}] * ({length})"
2d_seq = "{name} = [[{default}] * ({length_j}) for _ in {length_i}]"

# 宣言と確保
[declare_and_allocate]
-seq = "{name} = [{default}] * ({length})  # type: \"List[{type}]\""
-self.declare_and_allocate_2d_seq = "{name} = [[{default}] * ({length_j}) for _ in {length_i}]  # type: \"List[List[{type}]]\""
+seq = "{name} = [{default}] * ({length})  # type: list[{type}]"
+self.declare_and_allocate_2d_seq = "{name} = [[{default}] * ({length_j}) for _ in {length_i}]  # type: list[list[{type}]]"

# 入力関数
[input_func]
int = "int(next(tokens))"
float = "float(next(tokens))"
str = "next(tokens)"

# 入力
[input]
int = "{name} = {input_func}"
float = "{name} = {input_func}"
str = "{name} = {input_func}"

# 宣言と入力
[declare_and_input]
int = "{name} = {input_func}  # type: int"
float = "{name} = {input_func}  # type: float"
str = "{name} = {input_func}  # type: str"

# 確保と入力
[allocate_and_input]
seq = "{name} = [{input_func} for _ in range({length})]"
2d_seq = "{name} = [[{input_func} for _ in range({length_j})] for _ in range({length_i})]"

# 宣言と確保と入力
[declare_and_allocate_and_input]
-seq = "{name} = [{input_func} for _ in range({length})]  # type: \"List[{type}]\""
-2d_seq = "{name} = [[{input_func} for _ in range({length_j})] for _ in range({length_i})]  # type: \"List[List[{type}]]\""
+seq = "{name} = [{input_func} for _ in range({length})]  # type: list[{type}]"
+2d_seq = "{name} = [[{input_func} for _ in range({length_j})] for _ in range({length_i})]  # type: list[list[{type}]]"

# 引数
[arg]
int = "{name}: int"
float = "{name}: float"
str = "{name}: str"
-seq = "{name}: \"List[{type}]\""
-2d_seq = "{name}: \"List[List[{type}]]\""
+seq = "{name}: list[{type}]"
+2d_seq = "{name}: list[list[{type}]]"

# 配列アクセス
[access]
seq = "{name}[{index}]"
2d_seq = "{name}[{index_i}][{index_j}]"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions