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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

Q&A

解決済

1回答

1521閲覧

なぜeelによって呼び出されたpython関数は()が2つ必要なのか

Yoshi.OT

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

0グッド

1クリップ

投稿2022/02/06 02:08

前提・実現したいこと

pythonのeelを使って、HTML/CSS/JavaScriptでGUIを構築したいと考えています。
下記サイトを自環境下で模写・学習していました。
https://qiita.com/inoory/items/f431c581332c8d500a3b

質問したいこと

async await によって、Javascript側でpythonの関数を呼び出した際、
pythonの関数の後ろに()が2つ付けられています。
下記コードで言うと、”eel.python_function2”の後ろです。
→async awaitについて記述された類似記事でも同様のようで、
なぜ()を2つ付ける必要があるのか、教えてもらえると幸いです。

該当のソースコード

async function run() { let val = await eel.python_function2()(); console.log(val + " from Python") }

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

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

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

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

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

guest

回答1

0

ベストアンサー

eel.python_function2関数が「関数を返す関数」で、その関数をそのまま実行しているからです。

冗長に書くと以下のようになります。

javascript

1async function run() { 2 let fun = eel.python_function2() 3 let val = await fun(); 4 console.log(val + " from Python") 5}

投稿2022/02/06 05:03

TakaiY

総合スコア14251

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

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

Yoshi.OT

2022/02/06 06:01

このたびはご回答いただきありがとうございます。 おかげさまで、ふんわりとイメージできました。 eel.python_function2()という関数を、fun()が実行しているイメージでよろしいでしょうか?
TakaiY

2022/02/06 07:21

たぶん、ちがいますね。 「eel.python_function2()という関数」 というのがちょっとあいまいな表現ですが、 「eel.python_function2」 という関数に、「()」を付けるとその関数が実行されます。 (これは普通のことですね)。 「printf という関数名に 「()」 をつけるとその関数が実行される」と書くとわかりやすいでしょうか? 実行すると、値が返ります。 「eel.python_function2』という関数は、「関数を返す」関数です。 なので、 fun にはその 「eel.python_function2が返した関数」が入っています。 『eel.python_function2」関数ではありません。 で、fun() でその「eel.python_function2が返した関数」が実行されます。
Yoshi.OT

2022/02/06 21:26

おはようございます!ご丁寧にご返信いただきましてありがとうございます! なるほど、関数に()をつけると、その関数実行されるという意味なのですね。 つまり、 ☆ eel.python_function2という関数に()をつけて実行する。 ☆ eel.python_function2は「関数を返す」関数であるため、()をつけて実行することで関数が返ってくる。「返ってきた関数」は、funに格納される。 ☆ funにも()をつけたため、fun自体が実行される。実行された結果、「返ってきた関数」が実行される。 と解釈しました。拙い日本語で恐縮ですが、正しい理解でしょうか?
TakaiY

2022/02/07 01:05

はい。 まさにそのとおりです。 「関数に()をつけると、その関数実行される」 これがポイントです。 そして、 eel.python_function2()() とすると、「eel.python_function2()が返した関数をそのまま実行する」という処理になるのです。
Yoshi.OT

2022/02/07 12:08

ご回答いただきありがとうございました! 関数自体への理解が深まり、大変勉強なりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問