質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

5回答

3108閲覧

【Python】変数名を数字から始めたい場合の代替案が知りたいです

dkito

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/04/03 22:18

編集2022/04/03 22:21

Pythonで、どうしても変数名を数字から始めたい場合の代替案をお聞きしたいです。

いい例が思いつかなかったのですが、例えば、
”5日間”などを数字から始めて命名したい場合の代替案をお聞きしたいです。

”5日間”は、5_days とは命名できないので、数字を使わないなら、five_daysとかになると思いますが、

でも、”215日間”の場合はどう命名すればいいのか?適当にアンダーバーを付けて、_215_daysとしてもいいのでしょうか?

ここでは、どうしても数字から始めたいという前提で考えていただきたいです。

何かいい方法があればぜひ知りたいです。よろしくお願いします。

バージョン
Python3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

”215日間”の場合はどう命名すればいいのか?

そもそも論にはなりますが、具体的な数値は、コード上に即値として書くのすら、「マジックナンバー」としてアンチパターンに挙げられるようなものです。ましてや変数名に使うというのは、考え方そのものが妥当ではありません。

「215日間」が何の日数なのかによって、その意味合いで付けるほうが妥当ではないかと思われます。

投稿2022/04/03 23:13

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/04/03 23:33

制度やプロセス、気候などの変化で、当該の日数が215日からずれてしまった場合は悲惨です。変数名ごと変えるか、変数名と中身の違う読解しづらいコードを維持するかのどちらかになってしまいます。
guest

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
shiracamus

総合スコア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

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文法的に許されてないのでどうしようもないです。
そもそもの、数字から始めなければならないという考え方から改めましょう

投稿2022/04/03 22:49

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数でなく、dict を使うというのではだめですか?
p.py

python3

1days = { 2 '1日間': '24時間です', 3} 4 5days['5日間'] = str(5 * 24) + '時間です' 6days['125日間'] = str(125 * 24) + '時間です' 7 8print('1日間:', days['1日間']) 9print('5日間:', days['5日間']) 10print('125日間:', days['125日間'])

実行例
イメージ説明

投稿2022/04/04 21:56

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問