Pythonで、どうしても変数名を数字から始めたい場合の代替案をお聞きしたいです。
いい例が思いつかなかったのですが、例えば、
”5日間”などを数字から始めて命名したい場合の代替案をお聞きしたいです。
”5日間”は、5_days とは命名できないので、数字を使わないなら、five_daysとかになると思いますが、
でも、”215日間”の場合はどう命名すればいいのか?適当にアンダーバーを付けて、_215_daysとしてもいいのでしょうか?
ここでは、どうしても数字から始めたいという前提で考えていただきたいです。
何かいい方法があればぜひ知りたいです。よろしくお願いします。
バージョン
Python3
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
ベストアンサー
”215日間”の場合はどう命名すればいいのか?
そもそも論にはなりますが、具体的な数値は、コード上に即値として書くのすら、「マジックナンバー」としてアンチパターンに挙げられるようなものです。ましてや変数名に使うというのは、考え方そのものが妥当ではありません。
「215日間」が何の日数なのかによって、その意味合いで付けるほうが妥当ではないかと思われます。
投稿2022/04/03 23:13
総合スコア146544
0
具体的な値は「何」の5日間なのでしょう?
datetime の 5days なら delta_5days
にするのはいかがでしょうか?
旅行の5日間なら travel_5days
にするとか。
days
という変数を作って 5 * days
とか 215 * days
にするわけにはいきませんか?
あるいは辞書型にして、days = {5: 実際の値, 215: 実際の値}
にして days[5]
で参照するとか。
アンダースコアで始める変数名はプライベート変数である意思表示で、アンダースコアで始まる変数はimportできなかったりします。
投稿2022/04/03 22:27
編集2022/04/03 22:36総合スコア5406
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Python では、変数のテーブルは辞書で管理されている為、数値から始まる変数自体は作れます。
しかし、ソースコード中で参照する際の、変数の表記方法に制限があります。
python
1 2# 辞書を通じて値を設定する場合、任意のキーが使える。文字列以外も可能。 3locals()["5days"] = 5 4 5# 但し、参照の際も辞書[キー] の形式で書かなければならない。 6locals()["5days"]
恐らくこれは、納得できる形の解決策ではないはずです。
コードの可読性が大幅に下がるので、実用的なコードではありません。
Python では、字句解析・構文解析、等のツールがライブラリとして提供されており
割と現実的な規模のコード量で構文を拡張すること自体はできます。
しかし、数値から始まる変数名を許容した場合は問題があり、
数値リテラルには〇進数や指数表記といった表現があり、既存のリテラル表現と競合します。
>>> 1e2 100.0 >>> 0xFF 255 >>> 0b111 7
もし独自の「数値から始まる」という規則を許す場合、「1e2」 は、妥当な変数名となるはずですが、
数値リテラルの一部の表現と競合する為、どちらかが使えなくなります。
多くのプログラミング言語で使えるリテラル表現なので、
同様の理由により、数値から始まる変数名は許容されてないはずです。
仮に変更したとしても、IDEやエディターでの構文ハイライトのサポート、デバッガの対応も必要になったり
ある程度開発環境を構築して、構文チェック等のツールも導入している場合は、
構文に手を入れるのは、作業量に対しての利点が少ないので、大抵の場合は悪手です。
接頭子に適当な文字を付けるだけ済むのであれば、そちらの方がずっと簡単な回避策です。
「なぜ数値から始まる変数名が使えないのか」を理解できれば、
納得できるのではないでしょうか。
他の方法
python3.x では、変数名には日本語も使えます。
漢数字は使えるが、全角数字は使えないみたいです。
python
1# SyntaxError 25日間 = None 3 4# OK 5五日間 = None
他の方法2
実際の用途に合うかどうかは解りませんが、
例として提示された「215日間」は、具体的な値を持つ数値リテラルであり、
そもそも変数名としてふさわしくありません。
変数へ代入「215日間 = 値」として、その値を「215日間」表記で式中で使いたいのだと思いますが
その場合の代替え策としては、独自の型を定義し、リテラルに近い表記で使えるようにする手法があります。
python
1from datetime import timedelta 2 3class Days: 4 def __init__(self, value=1): 5 self._value = value 6 7 @property 8 def delta(self): 9 return timedelta(days=self._value) 10 11 def __repr__(self): 12 return f"<{self._value} days>" 13 14 def __rmul__(self, value): 15 self._value = value 16 return self 17 18day = days = Days() 19 20if __name__ == "__main__": 21 print(215*days)
投稿2022/04/04 07:31
総合スコア8817
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2022/04/04 21:56
総合スコア22328
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/03 23:33