すいません教えて下さい。

pythonで以下の変数をセットしています。

aaa = 'hensu_name'

aaaで指定した'hensu_name'に対して値を入れたい場合は
どのように実装すればよいでしょうか?
(aaaに入れたstringを変数名にしたい)

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

exec関数を使って文字列をコードとして実行すれば、それっぽいことができるように思います。


あまりいい例を思いつかないですが、以下のような感じでしょうか?

aaa = "hensu_name"
src = aaa + " = 'hello'" #srcの中身は、"hensu_name = 'hello'"

exec(src)
print hensu_name #hello が表示される

src = "print " + aaa #srcの中身は、"print hensu_name"
exec(src) #hello が表示される


ただ、No.1の方がおっしゃっているように、あまりお勧めな方法ではありません。
文字列をコードとして実行してしまうので、少々危険な側面もあります。
悪意のあるコードを含む文字列を実行してしまうとか…。
    • good
    • 0

変数aaaに入れた文字列を使って、なにかの変数にアクセスしたいということでしょうか?


Pythonの名前空間は基本的に辞書でできています。
操作したい変数が属する名前空間のオブジェクトを取得すれば、アクセスできます。

これはローカル変数を操作する例です。
(インデントなしの一番外側lのレベルで実行しているので、locals()もglobals()も同じになってしまいます。locals()、globals()については、ドキュメントを見てください)

>>> aaa = 'hensu_name'
>>> ns = locals() #globals()でも変わりません
>>> ns[aaa] = 'value'
>>> hensu_name
'value'

こちらは、クラスのインスタンスにメンバ変数を追加してみた例です。

>>> aaa = 'hensu_name'
>>> class A(object): pass
...
>>> obj = A()
>>> obj.__dict__[aaa] = 'hoge'
>>> obj.hensu_name
'hoge'
    • good
    • 3

一応、eval を使う、という手段はありますが、あまりお勧めできません。



○辞書を使う
variable['hensu_name'] = 123

○属性だったら、
http://docs.python.jp/2/library/functions.html#g …
http://docs.python.jp/2/library/functions.html#s …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q変数名やサブプロシージャーの名前を英語ではなく日本

VBAにおいて
変数名やサブプロシージャーの名前を英語ではなく日本語でつけると
どのような不具合が発生しますか?
ネット上のサンプルコードなどを見ていると、
Dim i As Long
など、変数名を英字にしてありますが
自分は
Dim 行 As Long
Dim 数 As Long
などにしてしまいます。

このように日本語で変数名をつけると
どのようなデメリット・不具合が発生するのでしょうか?

コードとして見にくいだけですか?
ご回答よろしくお願いします。

Aベストアンサー

日本語を表示できない環境とか、日本語が理解できない人が読む場合とか、そういう自明なデメリットを除くと特にないはずです。

Q[platex] description環境でのitemのオプション([]内)で]という文字を使うには?

\documentclass[12pt]{jreport}
\begin{document}

単位は[mm]のように鍵括弧でくくって書くことにします

\begin{description}
\item[5[cm]の時]{5[cm]の時と表示されるのが望んでいる動作。実際は先の括弧で終わったと解釈されてしまい、5[cmの時]となってしまう。
バックスラッシュを使おうとしても「Bad math environment delimiter.」というエラーが表示されてしまう。どうするのが正解か?}
\end{description}
\end{document}

Aベストアンサー

\item[5[cm]の時]

\item[5{[cm]}の時]
としてください。

Q項目数は英語で

フィールドの項目数を格納する変数を定義したいのですが、
適切な名前が思い当たりません。
項目数は英語でなんていうのでしょうか。
また、変数などを命名する際に参考になりそうなサイトがあればご紹介願います。
よろしくお願いします。

Aベストアンサー

通常、命名規約は変数のスコープとか型を現す接頭語などを定義しますが名称まで定義するのは珍しいです。

まあ、システムでの項目って業種、業態、業界などで取り扱う物が違いますし物によって同じものでも業界用語で呼ばれるものやその会社独特の名称で呼ばれるものがありますので

よくやるのが先頭1文字をスコープとし
g:プロジェクト内参照可能(Global、今はPublicと書きますが)
m:モジュール内参照可能(Module)
l:関数内(Procedure)の変数(Local)
p:関数の引数で指定されたもの(Parameter)

次に型
s:string,i:int,l:long,b:bool,d:date...
場合により2文字とか3文字を使う所もあるようです

プログラム名やフォーム名もシステムが大きくなると
先頭をサブシステム、次に処理タイミング、日次・月次・随時・年次・・・
の後に連番数字をつけて画面名とか
テーブル名も先頭をマスタ、トラン、ワーク・・・などを付ける等等、、、

テーブル等の項目名は最初に名前を付けた人に準じて命名してます。
自分が最初の場合はかなり適当です、極力あとで分かるようにと思ってつけますがやはりテーブルレイアウト参照しながら出ないとPGが作れないですが
YahooとかLivedoorの翻訳サイトで翻訳して適当なものを探しますが一般に使わない英単語を使うと後でなんだこれと思う事も良くありますので英語の苦手な私はローマ字表記がやはり見やすい気もします。
長い名前はコーディング時に面倒なので省略しながら。

ちなみに私ならフィールドの項目数位はローマ字にしないで単純にColCountでしょうね(笑)

通常、命名規約は変数のスコープとか型を現す接頭語などを定義しますが名称まで定義するのは珍しいです。

まあ、システムでの項目って業種、業態、業界などで取り扱う物が違いますし物によって同じものでも業界用語で呼ばれるものやその会社独特の名称で呼ばれるものがありますので

よくやるのが先頭1文字をスコープとし
g:プロジェクト内参照可能(Global、今はPublicと書きますが)
m:モジュール内参照可能(Module)
l:関数内(Procedure)の変数(Local)
p:関数の引数で指定されたもの(Parameter)

次に...続きを読む

Q言語[C#、Java]..クラスの扱い方の違い[ファイル名とpublicなクラス名について]

C#とJavaでのクラスの扱い方の違うであろうことに困惑しています。

Javaの場合では、publicなクラス名とJavaファイル名(クラスのファイル名)を一致させる。というのがきまり事だったかと思います。

ですが、

C#の場合では、publicなクラス名とクラスファイル名を一致させなくても動作しています。

C#でのクラス名とクラスファイル名のしばりは何もないのでしょうか?

ご存知の方、助言宜しくお願い致します。

Aベストアンサー

がると申します。
どちらかというと、Javaのように「ファイル名とclass名との間に縛りがある」言語のほうが珍しいと思うので。
記憶しているかぎりでは、C#は「自由に」ファイル名をつけられた記憶があります。

Qプログラムの変数名にするとどうなりますか

変数になる単語とその英語の直訳です。これらを変数名にしてみてください


宿泊者氏名→Those who stay name
TEL→telNo
備考→Remarks
住所→Address
携帯番号→Mobile phone number
E-mail→E-mail
部屋No→Room No
人数(大人)→Number of people(Adult)
人数(小人)→Number of people(Child)
人数(幼児)→Number of people(Infant)
基本料金(大人)→Basic charge(Adult)
基本料金(小人)→Basic charge(Child)
基本料金(幼児)→Basic charge(Infant)
入湯税→Bathing tax
宿泊開始日→Staying start date

予約金→Reservation money
消費税あり  チェックボックス→Consumption tax
消費税なし  チェックボックス→Consumption tax none
清算日の当日処理を表す変数(ラジオボタン)  →Processing the day before of liquidation day
清算日の前日処理を表す変数(ラジオボタン)  →Processing the day before of liquidation day
清算日の指定日処理を表す変数(ラジオボタン) →Processing on specified day on liquidation day
精算書を作成ボタン→Adjustment book
画面を閉じるボタン→

変数になる単語とその英語の直訳です。これらを変数名にしてみてください


宿泊者氏名→Those who stay name
TEL→telNo
備考→Remarks
住所→Address
携帯番号→Mobile phone number
E-mail→E-mail
部屋No→Room No
人数(大人)→Number of people(Adult)
人数(小人)→Number of people(Child)
人数(幼児)→Number of people(Infant)
基本料金(大人)→Basic charge(Adult)
基本料金(小人)→Basic charge(Child)
基本料金(幼児)→Basic charge(Infant)
入湯税→Bathing tax
宿泊開始日→Staying st...続きを読む

Aベストアンサー

salsberry様の javaでは漢字も使える というのは間違いです。
""で括らない限り、エラーになります。

java 命名規約 で検索されると良いでしょう。

以下は私からのアドバイスです。

複数の単語が並ぶ場合は1つ目以外の単語の頭文字を大文字にして重ねます。
ちなみに長くなりすぎるのは好ましくありません。
意味が通じる最小単位にとどめましょう。
それと、余計な接続詞は省きます。
Mobile phone number → phoneNumber

同じ単語で意味合いが違う場合
そもそも、javaはオブジェクト指向言語です。
変数名で意味合いに違いを持たせる前に、クラスで違いを持たせるべきです。
つまり、
Adultクラス(大人に関する情報をとり扱う)クラス
Childクラス(子供に関する情報をとり扱う)クラス
Infantクラス(幼児に関する情報をとり扱う)クラス
をつくり、
それぞれに peopleNumber と basicCharge という変数を宣言しましょう。

消費税有り無しについては
まずは、
double tax という変数を宣言します。税率の計算はこれをかけるだけ
次に、
消費税ありの定数となしの定数を作りましょう。
public static final double EXIST_TAX = 1.05;
public static final dopuble NONE_TAX = 1.0;
あとは必要に応じて、tax に EXIST_TAX または NONE_TAX を代入しましょう。
この方が後から見て分かりやすいです。

コンポーネントの命名は "どのコンポーネントを使っているか" が重要です。

消費税あり チェックボックス→existTaxCheckBox
消費税なし チェックボックス→noneTaxCheckBox

salsberry様の javaでは漢字も使える というのは間違いです。
""で括らない限り、エラーになります。

java 命名規約 で検索されると良いでしょう。

以下は私からのアドバイスです。

複数の単語が並ぶ場合は1つ目以外の単語の頭文字を大文字にして重ねます。
ちなみに長くなりすぎるのは好ましくありません。
意味が通じる最小単位にとどめましょう。
それと、余計な接続詞は省きます。
Mobile phone number → phoneNumber

同じ単語で意味合いが違う場合
そもそも、javaはオブジェクト指向言語...続きを読む

Q[bash]ファイル内の変数名を値に変換したい

bashです。
環境変数に例えば以下の変数が設定されているとします。
VAL1="aaa"
VAL2="bbb"

aというファイルに以下が記載されているとします。
${VAL1}
${VAL2}

aというファイルを読み込んだ際に、
${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて読み込む方法はありますか。

変数のパターンは事前に分からないので、
'${VAL1}'を"aaa"に置換する、とかの方法はなしです。

evalを使えばうまくいきそうな気がするのですが、うまくいきませんでした。
> cat a | eval
⇒何も出力されない。

何か分かる方教えてください。

Aベストアンサー

以下のシェルを作成して、実行してください。
aのファイルを読み込み、${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて、出力するスクリプトです。
------------------------------
#! /bin/sh
while read LINE
do
eval VARNAME=$LINE
echo $VARNAME
done < a
------------------------------

Q距離と道のりの英語での表現について

プログラムの変数名で悩んでいるのですが英語で直線の「距離」と道に沿った「道のり」を使い分けるにはどのようにしたらよろしいでしょうか?

Aベストアンサー

 どちらもdistanceと言います。

 journeyだと道に沿った距離は言っても、直線距離には使わないようです。こちらを道程という意味の変数に使ってはどうでしょう?

 直線距離なら、airline-distance, direct-distance, linear-distance, rectilinear-distance, straight-line-distanceのどれかを変数名にしてはどうでしょう?

Q[delphi] 変数を利用してコンポーネント名指定したいのですが、可能でしょうか?

表題の件、どなたか教えてください。
「可能」か「不可能」かの情報や代替案でもありがたいです。

※delphi6 enterprise版を使用しています。

質問
コンポーネント名の指定に変数は使えるのでしょうか?
例えば、labelコンポーネントを複数設置しそのlabel名の末尾を数字にする(label1,2,3・・・)。何かの処理の際に、for文で変数を送り(i=1,2,3・・・)、label名+変数.captionなどという形で指定することはできるでしょうか?


ラベル名 label1 label2 label3 を設置

ボタンクリック時などに、
var
i : integer;

for i := 1 to 3 do
begin
  label(i).caption := inttostr(i) ;
end;

よろしくお願いします。

Aベストアンサー

そのような目的にはFindComponentが使えます。

for i := 1 to 3 do
begin
TLabel(FindComponent('Label'+InttoStr(i))).Caption:=InttoStr(i);
end;

Q時刻と時間を明確に区別したい時の変数名

変数名の付け方(英語)でお聞きしたいことがあります。

時刻 ・・・ 整数値 (0~2359)
時間 ・・・ 整数値 (0~上限無し)

という2つの概念があり、これらの変数名を明確に区別して付けたい時、
皆さんはどんな英単語を使いますか?

timeだとどっちだか分からないのでちょっと悩んでます。
でも、英語には時刻と時間を明確に区別する単語って無いですよね?

Aベストアンサー

例えば下記の単語で使い分けるのはどうでしょうか。

time:〔連続{れんぞく}した〕時間  (http://eow.alc.co.jp/time/UTF-8/)

term:〔限られた〕期間{きかん}、時間{じかん}  (http://eow.alc.co.jp/term/UTF-8/)

alcのサイトで調べた時の意味から抜粋しています。
(http://www.alc.co.jp/index.html)

参考URL:http://www.alc.co.jp/index.html

Q[python] で packの方法を教えてください

pythonで、バイナリファイルを扱おうと思います。
固定長の変数に、文字列と整数を代入する予定です。
環境は、Linuxのコマンドラインで使用します。
----------------------------------
C言語で書くと、次のように成ります。
char[32] str;
int [8] a;

str = "test hoge";
a = 123;

sprintf ("%32s%08d", str, a); //バイナリデータとして扱う
----------------------------------
上記のように、文字列や数値をバイナリデータにしたいと思います。
最終的には、バイナリデータ・ファイルを生成します。
この場合、packを使えば出来そうですが、例題がなかなか見つからず困っています。

何か良い方法を知りませんか。
よろしくお願いします。 m(_ _)m

Aベストアンサー

【追加情報】
 pack('%dsL' % 32, str,a)
 '%dsL'は'%ds'と'L'から構成されていて,「% 32」は'%ds'組み合わされ'32s'と同じ意味です。今回は文字数32文字を指定しやすくする為にわけていました。
 続けて'L'はlong整数型4バイト(unsigned long)を表しています。
 後は'32sL'で指定されたこの順番通りに参照する文字列(str),参照する整数型(a)を並べて記述します。
 もし3つ目にunsigned long cを増やす場合は「pack('%dsLL' % 32, str,a,c) 」のように単純に追加が出来ます。
 この's’とか’L'の意味については次のサイトを確認して下さい。他にも'H'とか'B'などあります。
http://www.python.jp/doc/release/lib/module-struct.html

※今更ですがaがint型(符号付き)であれば'L'ではなく'i'か'l'が妥当だったかもしれません。そのあたりは検討してみてください。

【追加情報】
 pack('%dsL' % 32, str,a)
 '%dsL'は'%ds'と'L'から構成されていて,「% 32」は'%ds'組み合わされ'32s'と同じ意味です。今回は文字数32文字を指定しやすくする為にわけていました。
 続けて'L'はlong整数型4バイト(unsigned long)を表しています。
 後は'32sL'で指定されたこの順番通りに参照する文字列(str),参照する整数型(a)を並べて記述します。
 もし3つ目にunsigned long cを増やす場合は「pack('%dsLL' % 32, str,a,c) 」のように単純に追加が出来ます。
 この's’とか’L'の意味...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング