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

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

新規登録して質問してみよう
ただいま回答率
85.46%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

解決済

2回答

685閲覧

関数の仮引数に変数を渡して関数を動かしたい

tam1006

総合スコア28

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

2クリップ

投稿2021/04/13 14:14

編集2021/04/13 14:15

前提・実現したいこと

関数の仮引数に変数を渡して関数を動かしたいのですが、これって可能なのでしょうか。例えば

Python

1def div(x=1, y=2): 2 print(f'x/y = {x}/{y} = {x/y}')

このようなdiv関数を定義したとします。x/yを表示する関数です。

例えばdiv(x=3, y=4)を入れると、

Python

1x/y = 3/4 = 0.75

と出るかと思います。

ここで、この仮引数に、変数を用いて値を渡してやるということを行いたいというわけです。直感的には(仮引数がもしただの文字列だったならば)次のように書いたものが動作して欲しいということです。

Python

1# xを表す変数 2dividend = 'x' 3# yを表す変数 4divisor = 'y' 5 6div(dividend=3, divisor=4)

しかし、この場合は当然、divの引数として書いたdividendとdivisorは、その名前の仮引数にそれぞれの値を入れようとするわけですが、div関数には仮引数はxとyしかないため、次のエラーが出ます。

TypeError: div() got an unexpected keyword argument 'dividend'

dividendとdivisorという変数を用いることによって、div関数の仮引数に値を渡すことは可能なのでしょうか?もし可能なら、どう書けばいいのでしょうか。

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

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

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

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

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

guest

回答2

0

devという関数に実引数として変数をふたつ入れ、その変数名を関数内で参照することをしたいのなら、それはできません。

なぜなら、pythonは関数を呼びだすときに、実引数を評価してその結果を関数に渡すからです。

tam1006さんの求める解ではないと思いますが、devという関数に、変数をふたつと変数名をふたつ渡すとか、辞書を一つと変数名をふたつ渡すとかをしなければ無理でしょう。

関数の仮引数に変数を渡して関数を動かしたいというのに理由があるなら、もっと別の回答ができるかも入れません。

投稿2021/04/13 14:36

編集2021/04/13 14:38
ppaul

総合スコア24666

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

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

tam1006

2021/04/13 14:50

def move_to(self, X: int = None, Y: int = None, Z: int = None, A: int = None): for axis, value in [('X', X), ('Y', Y), ('Z', Z), ('A', A)]: if value is not None: if axis == 'A': self.arduino.move_to(A=value) elif axis == 'X': self.chiron.move_to(x=value) elif axis == 'Y': self.chiron.move_to(y=value) elif axis == 'Z': self.chiron.move_to(z=value) これはあるコードの一部なのですが、このif分岐が面倒なのです。インスタンスの中のmove_to関数はそれぞれA,x,y,zという仮引数があるのですが、それに大元のmove_to関数の入力引数を入れたいのですが、もっとスマートに書きたいと思って、このような形の質問をさせていただきました。
tam1006

2021/04/13 14:52

すみません、なぜかインデントがバグって見にくいです
guest

0

ベストアンサー

やりたいことの目的がよくわかっていませんが、
辞書を作って、それを展開して渡す形にするのはどうでしょう。

python

1def div(x=1, y=2): 2 print(f'x/y = {x}/{y} = {x/y}') 3 4# xを表す変数 5dividend = 'x' 6# yを表す変数 7divisor = 'y' 8 9div(**{dividend: 3, divisor: 4})

投稿2021/04/13 14:35

bsdfan

総合スコア4596

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

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

tam1006

2021/04/13 14:42

なるほど、こうすればいいのですか! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問