🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

645閲覧

関数名と引数への代入値の取得

yuya_

総合スコア10

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/12 04:17

関数を呼びだすとき、関数そのものの名前のstrとその関数に渡す引数の値を取得したいです。
ただし戻り値として値を返すことは、他コードとの兼ね合いからできるだけ避けたいです。
関数として波にのデータを呼び出し、処理結果を利用するコードを想定しています。

python

1def inputwave1(high,length,speed): 2 ~~ 3 return result 4 5def inputwave2(high,length,speed): 6 ~~ 7 return result 8 9input = inputwave1(1,2,3)

この時"inputwave1"と引数への代入値の"1""2""3"を取得したいのですが、どのようにすればよいでしょうか。前述したように戻り値resultの行はできるだけ変更を避けたいです。

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

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

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

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

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

TakaiY

2020/12/12 04:43

取得した関数名と引数の値の使いかたのイメージができません。 それを取得したとして、どこでどのように使うのでしょう?
yuya_

2020/12/12 04:59

resultを用いて更に計算処理を行い、最後に.datに出力するのですが、その際の計算条件のメモとして.txtに入力波やそのlengthなどを書き込みます
guest

回答4

0

かなり裏技的な方法ですが、スタックフレームから現在実行中の関数名を取得することができます。
[Python] 関数内からその関数の名前を取得する方法 - Qiita

投稿2020/12/12 10:27

A_kirisaki

総合スコア2853

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

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

0

ベストアンサー

関数デコレータを使うのはどうでしょうね。

python

1def output_info(fun): 2 def print_info(*args, **kwargs): 3 print(f'F_name: {fun.__name__} , arg:{args} {kwargs}') 4 return fun(*args, **kwargs) 5 return print_info 6 7@output_info 8def inputwave1(high,length,speed): 9 result = high + length + speed 10 return result 11 12@output_info 13def inputwave2(high,length,speed): 14 result = high - length - speed 15 return result 16 17 18inputwave1(1,2,3) 19inputwave1(1,2,3) 20

出力

text

1 2F_name: inputwave1 , arg:(1, 2, 3) {} 3F_name: inputwave2 , arg:(1, 2, 3) {}

とりあえず、標準出力に出すようにしましたが、ファイルに出力したり、ログに出力したりすればよいかと。

投稿2020/12/12 10:21

TakaiY

総合スコア13748

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

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

yuya_

2020/12/12 16:17

ありがとうございます。一度検討してみます
guest

0

僭越ながら、クラスを使うのはいかがでしょうか

class Wave(): def __init__(self, high, length, speed): self.high = high self.length = length self.speed = speed def get_date(self): data = [] data = self.high, self.length, self.speed return data def calculate(self): pass wave1 = Wave(1,2,3) data = wave1.get_date() print("データ{},{},{}".format(data[0],data[1],data[2]))

上の例で言うと、
・波の処理はcalculate内に書いてresultを戻り値とし
・クラスに渡した値はget_dataメソッドで取得
・波の名前はクラスインスタンスそのもの

と言う感じです。

投稿2020/12/12 04:59

yaha4967

総合スコア106

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

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

0

何をしたいのか現在の質問文では不明ですが、
関数の中で、それらを参照したいと言うことであれば、引数で渡すことになります。

投稿2020/12/12 04:55

otn

総合スコア85882

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

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

yuya_

2020/12/12 05:01

resultを用いて更に計算処理を行い、最後に.datに出力するのですが、その際の計算条件のメモとして.txtに入力波やそのlengthなどを書き込みます
otn

2020/12/12 06:20 編集

↑これは、 > "inputwave1"と引数への代入値の"1""2""3"を取得したい という、質問文とどういう関係があるんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問