差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
programming_algorithm:python_tips [2020/07/01] – ikatakos | programming_algorithm:python_tips [2020/07/03] – [独自クラス] ikatakos | ||
---|---|---|---|
行 253: | 行 253: | ||
競プロの文脈でポイントとなるのは、以下だろう。 | 競プロの文脈でポイントとなるのは、以下だろう。 | ||
- | * 高速化のため、NoPythonモード、事前コンパイル | + | * "NoPythonモード" で "事前コンパイル" する |
* 使わない方がよい問題もある | * 使わない方がよい問題もある | ||
* 文字列の方が扱いやすい問題とか、多倍長整数が有効な問題とか | * 文字列の方が扱いやすい問題とか、多倍長整数が有効な問題とか | ||
行 326: | 行 326: | ||
OS環境はWindowsなら '' | OS環境はWindowsなら '' | ||
+ | これで切り分けて、ローカルならJITコンパイルして実行するようにスニペットを作っておく。 | ||
==== 入力受け取りと型指定 ==== | ==== 入力受け取りと型指定 ==== | ||
行 361: | 行 361: | ||
* それぞれを個別にコンパイル | * それぞれを個別にコンパイル | ||
- | * 1つの大枠の関数の中で個々の関数定義も書いて、大枠の関数のみコンパイル | + | * 1つの大枠の関数の中で個々の関数定義も書いて、大枠の関数のみコンパイル(関数内関数) |
前者は関数毎にコンパイル指定(JITなら'' | 前者は関数毎にコンパイル指定(JITなら'' | ||
後者は大枠関数のみの指定で特に問題なく内部の関数も型推論してくれる。 | 後者は大枠関数のみの指定で特に問題なく内部の関数も型推論してくれる。 | ||
- | 普通に後者でいいと今のところは思っている。 | + | ただし、Numbaの内部関数が再帰を含む場合、それはコンパイルが通らない。 |
+ | |||
+ | numba.core.errors.NotDefinedError: | ||
+ | |||
+ | 通常は1つの大枠関数に入れた方が手間が少ないのでそうし、再帰関数のみ個別にコンパイルする。 | ||
==== 独自クラス ==== | ==== 独自クラス ==== | ||
行 374: | 行 379: | ||
AOTでのコンパイル方法は探したけど見つかってない。 | AOTでのコンパイル方法は探したけど見つかってない。 | ||
- | クラスは一連の処理をまとめて理解しやすくしてくれる点はあるが、競プロのような短いコードでは必須でもないので、今のところはクラスを使わない書き方で対処する方針で。 | + | クラスは、1つのオブジェクトに関係する処理をまとめることで理解しやすくしてくれる点はあるが、競プロのような短いコードでは必須でもないので、今のところはクラスを使わない書き方で対処する方針で。 |
* [[https:// | * [[https:// |