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

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

詳細はこちら
Python 3.x

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

Q&A

解決済

3回答

424閲覧

Pythonの変数について(初心者です)

jwill

総合スコア2

Python 3.x

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

0グッド

0クリップ

投稿2021/01/30 09:10

前提・実現したいこと

下記のコードの場合は実行できますが、最終行をprint(func)とするとエラーになるのはなぜでしょうか?

該当のソースコード

def msg(): print("Hello") func = msg func()

試したこと

しかし下記のように単純に変数だけにすると実行できます。

該当のソースコード

func = "Hello"

print(func)

試したこと

しかしこの最終行を反対にfunc()にするとエラーになります。
defを使った場合と使わない場合であべこべの結果になるのはなぜでしょうか?

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

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

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

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

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

guest

回答3

0

最終行をprint(func)とするとエラーになるのはなぜでしょうか?

エラーにはなりません(paiza.io)。変数に入った関数をprintして、その結果が出力されます。


python

1func = "Hello" 2 3print(func())

"Hello"()のような呼び出しはできませんので、func()も呼び出し不能です。

投稿2021/01/30 09:17

maisumakun

総合スコア145977

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

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

jwill

2021/01/30 12:26

ありがとうございます。
guest

0

関数は後ろに()を付けることができますが、文字列は後ろに()を付けることができません。
後ろに()を付けることができるものをcallableと呼びます。関数の他にもクラスもcallableです。
callableであるかどうかは、callbleという関数を使って調べることができます。

python

1>>> print(print) 2<built-in function print> 3>>> print(callable(print)) 4True

printは組み込み関数(built-in function)なのでcallableです。

python

1>>> print(int) 2<class 'int'> 3>>> print(callable(int)) 4True

intはクラス(class)なのでcallableです。

python

1>>> print(callable('Hello')) 2False 3>>> hello = 'Hello' 4>>> print(callable(hello)) 5False

'Hello'は文字列なのでcallableではありません。
変数に代入しても同じ事です。

python

1>>> def msg(): 2... print("Hello") 3... 4>>> func = msg 5>>> print(func) 6<function msg at 0x000002006991D280> 7>>> print(callable(func)) 8True

def msgを行うと、msgという名前の関数が作られます。
これをfuncに代入して調べて見ると、「function msg」として表示されます。
これは間違いではなく、作られたときの名前がmsgだったからです。
そして、funcは関数なのでcallableです。

callableでないものに()を付けるとエラーになります。

投稿2021/01/30 09:55

ppaul

総合スコア24670

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

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

jwill

2021/01/30 12:24

ありがとうございます。
guest

0

ベストアンサー

Pythonにおける関数の役割と変数について理解する必要があるので、調べましょう。以降は直感的な説明なので、参考書やオンラインドキュメントなどで確認してください。
まず、一つ目のコードでprint(func)としてもエラーは出ません。funcは関数なので、"funcがどのような関数であるか"という情報が出力されます。
次に、二つ目のコードでfunc()とした場合はfuncは関数ではないので、"funcという関数が呼び出せません"というエラーが出ます。

投稿2021/01/30 09:20

編集2021/01/30 09:22
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

jwill

2021/01/30 12:25

ありがとうございます。 1つ目のfuncは関数で、2つ目のfuncは関数ではないんですね。 勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問