よくわからないのですが、a="func"ということでしょうか?
何か例を出してもらったほうが回答しやすいのではないかと思います
指定された名前で辞書に格納するとかではだめなんでしょうか?
locals()
が返す辞書に、関数名をキーとして関数オブジェクトをセットすれば関数を定義できます。ただし文脈によっては動かないことがあります。
name = "my_func"
locals()[name] = lambda: print("hello")
my_func() # => hello
exec()
を使って動的に関数を定義することもできます。
name = "my_func"
exec(f"""
def {name}():
print("hello")
""")
my_func() # => hello
いずれにしても、入力に応じて変数や関数の名前を決めるようなコードは普通の Python プログラミングでは書かないほうがいいです。(動的なコード生成が必要なフレームワークを作るときや、 Python で何ができるか実験するときに書く程度です。)なんらかの名前と値を対応させたいときは一般的には辞書オブジェクトを使います。
すでに同様のコメントついていますが、
入力に応じて変数を作るプログラム
変数の値を関数の名前にしたい
このように動的に変数や関数を作ったり変更したりするのは、技術的な興味ということであればよいのですが、実用的なプログラムを作るには向いていない概念です。
なぜそのようなことがしたいのか説明いただくことはできますか。
ちなみに、pythonであれば、exec()やeval()で実現できます。
皆様のご回答に感謝いたします。
@calcMCalcm様
その通りですね。わかりずらい表現をしていました。
以後はもっと詳しく書くようにします。
@juner様
辞書ですか。試してみようと思います。
@uasi様
丁寧に二つも例を示してくださり、ありがとうございます。
少々語弊がありましたね。
私が製作していたものは、モールス信号を出力するプログラムなのですが、それぞれの文字の関数を作るためのプログラムを作っていたため、実際に外部からの入力によって関数を実装するプログラムではないのでご心配なく。
@ypsilon-takai様
上に同じです。
一度皆様から得られた情報を試してみようと思います。
本当にありがとうございました。助かりました。
それぞれの文字の関数を作るためのプログラムを作っていたため
というのは、pythonのソースコードを吐くpythonプログラムということですか?
@ypsilon-takai様
おっしゃる通りです。
そういう構成は変更が面倒などのマイナス面が多くあると思うのですが、そういう構成にすることも目的の一つということでしょうか。
なぜそういう手法にしているのか差し支えなければお聞かせいただけますか。
@ypsilon-takai 様
あまり深い理由はありません。Pythonはまだ初心者で迷走しているだけです。
初心者とのことですので、今作っておられるものとはかけはなれた構成ですが、興味があったので軽く作ってみました。 (昔ハムだったので。電話級ですが)
参考になれば。
MORSE_TABLE = {
"ア":"--・--",
"イ":"・-",
"ウ":"・・-",
"エ":"-・---",
"オ":"・-・・・"
}
CHAR_SEP = "_"
WORD_SEP = "__"
def morse_code(txt):
code_list = [morse_code_word(w) for w in txt.split()]
return WORD_SEP.join(code_list)
def morse_code_word(word):
code_list = [MORSE_TABLE[c] for c in word]
return CHAR_SEP.join(code_list)
使うときは以下のようにすると
print(morse_code("アイ イエ イエイ オウ"))
以下のような出力が得られます。
--・--_・-__・-_-・---__・-_-・---_・-__・-・・・_・・-
トン(・)、ツー(ー)、文字間(_)、単語間(__)のようにしてあります。
これで変換したものが表示できますし、こういう文字列を音声に変換する関数を作って渡せば音声にもできます。
@ypsilon-takai 様
わざわざコードを書いてくださりありがとうございます。
自分が考えていたものよりもシンプルでいいですね。
参考にさせていただきます。