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

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

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

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

Python

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

Q&A

解決済

2回答

1539閲覧

メソッド末尾に()がないことの意味

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2017/04/10 12:41

編集2017/04/10 12:48

turtleモジュールのonclick()とgoto()を一緒に使う以下のコードが理解できません。
今まで学習してきた知識では「KAME.goto」ではなく、「KAME.goto () 」と**()**を付けたくなります。
goto(x,y)という記法でx,y座標に移動するメソッドのはずなのに、どうしてgotoだけで機能するのでしょうか。

import turtle KAME = turtle.Turtle() KAME.getscreen().onclick(KAME.goto)

マニュアルにonclickとgotoの説明がありましたが、これを読んでもgoto**()()**が不要な理由が理解できません。
メソッドには()が必要なはずのに、gotoに()が不要な理由を教えてください。

公式マニュアルから引用 turtle.onclick(fun, btn=1, add=None) fun – 2引数の関数でキャンバスのクリックされた点の座標を引数として呼び出されるものです turtle.goto(x, y=None) パラメータ:x – 数または数のペア/ベクトル y – 数または None

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

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

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

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

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

guest

回答2

0

onclickのソースをみるとわかると思いますが、引数として渡された関数では()付きで呼ばれています。

次のような処理を考えてみましょう。

python

1def func1(func): 2 func() 3 4 5def func2(): 6 print('func2 called') 7 8 9def func3(): 10 print('func3 called') 11 12 13func1(func2) 14func1(func3)

func2func3は共に()なしで渡されていますが、func1の処理で実行されています。

投稿2017/04/10 13:21

driller

総合スコア720

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

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

退会済みユーザー

退会済みユーザー

2017/04/10 13:36

関数オブジェクトはonclick()等のメソッド中で()付きのメソッドとして扱われているのですね。 実際のコードを見ることで、関数オブジェクトがどんな働きをしているのか理解できました。 コード付きでの分かり易いご説明ありがとうございました。
guest

0

ベストアンサー

そこでメソッドの呼び出しを行うのではなく、2引数(のキャンバスのクリックされた点の座標)を引数として呼び出される関数オブジェクトを指定するだけので、()は不要です。

関数オブジェクトという考えは分かりにくいかもですが、以下が理解の参考になるかと思います。
参考:第25回 関数オブジェクトとスコープ

投稿2017/04/10 12:56

編集2017/04/10 12:57
can110

総合スコア38266

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

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

退会済みユーザー

退会済みユーザー

2017/04/10 13:19

回答いただきありがとうございます。以下の理解に間違いはないでしょうか? --- goto(x,y)メソッドを関数オブジェクトにするとgotoとなる。 turtle.onclick(fun, btn=1, add=None)メソッドの引数funには関数オブジェクトのgotoを指定する。 そうするとonclickメソッドで取得された座標の(x,y)が、関数オブジェクトgotoに自動的に渡され、最終的にgoto(x,y)メソッドが実行される。 ---
can110

2017/04/10 13:24

はい。
退会済みユーザー

退会済みユーザー

2017/04/10 13:27

ありがとうございます。少し難しいですが、何とか理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問