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

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

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

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

Q&A

3回答

1450閲覧

入門Python3、4章にて

Qianli

総合スコア14

Python

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

0グッド

1クリップ

投稿2017/04/18 09:44

編集2022/01/12 10:55

4.7.7 一人前のオブジェクトとしての関数のあるコードにつまずきました。

def add_args(arg1,arg2): print(arg1+arg2) add_args(5,9) 14 def run_something_with_args(func,arg1,arg2): func(arg1,arg2) run_something_with_args(add_args,5,9) 14

(add_args,5,9)が(func,arg1,arg2)に代入されてるとあるんですけど、func(5,9)ではエラーになります。
これはなぜですか?

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

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

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

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

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

can110

2017/04/18 09:48

エラーが発生するコードとエラーメッセージを追記すると、回答得られやすいと思います。
Qianli

2017/04/18 10:44

エラーメッセージを確認したところ、NameError: name 'func' is not definedと出ているので、funcの定義がされてないということで(add_args,5,9)の役割はできないんですね。
guest

回答3

0

Python

1def run_something_with_args(func,arg1,arg2): 2 func(arg1,arg2)

この部分のfunc,arg1,arg2は仮引数と呼ばれます。

run_something_with_args()関数の中では

Python

1#first 2func = add_args 3arg1 = 5 4arg2 = 9 5 6#next 7func(arg1,arg2) # = add_args(5,9) 8 9#finally 10#func,arg1,arg2は"仮"引数なので関数の処理が終了した時点で、破棄される 11#->func,arg1,arg2は定義されていない

と処理されていると考えると分かりやすいかもしれません。

投稿2017/04/18 11:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

def run_something_with_args(func,arg1,arg2): func(arg1,arg2)

という関数定義で

run_something_with_args(add_args,5,9)

と実行しているので、

以下のようになっています。
add_args → func
5 → arg1
9 → arg2

add_argsは、手前で定義されている関数ですので、run_something_with_args関数の第一引数に、add_args関数が渡されています。
つまり、add_argsがfuncとなって、実行されています。

run_something_with_args関数内のfuncは定義された関数ではないので、単独では実行できません。

投稿2017/04/18 10:49

terapyon

総合スコア313

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

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

Qianli

2017/04/18 11:03

terapyonさま 手前で定義された関数が次の関数の第一引数に入るのは決まりみたいなものですか?
terapyon

2017/04/18 11:18

決まりではありません。 `def run_something_with_args(func,arg1,arg2):` で、第一引数に関数をもらうことを前提にしているからです。
Qianli

2017/04/18 11:39

terapyonさま 第一引数に関数をもらうのはコールバック関数と呼ばれるものでしょうか? googleでそれに似たものが出てくるんですが…
guest

0

質問の間違っていた部分がいつの間にか変更されていますね。

func は run_something_with_args のパラメータですから、関数外では使えません。
スコープについて調べてください。

投稿2017/04/18 09:48

編集2017/04/18 13:00
Zuishin

総合スコア28656

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問