2016-08-25 4 views
3

文字列をすべて大文字で印刷しようとしています。 printコマンドを実行すると、xのタイプと場所が出力されます。Python:.upperの後の値の印刷

結果の代わりに操作が印刷されるのはなぜですか?

x = 'bacon' 
x = x.upper 
print x() 

でも見ることが最も一般的な、と私はあなたを考える方法:

x = 'bacon' 
x = x.upper 
print x 

>>> 
<built-in method upper of str object at 0x02A95F60> 
+0

これはかなり正当な質問です。あなたがなぜdownvoteを得たか分かりません。 –

+0

@MadPhysicistそれは[googleの30秒](http://www.tutorialspoint.com/python/python_functions.htm)で解決できる可能性のあるものです。そのため、 – Aaron

+0

@Aaronです。 Pythonをよく知っている人として、これは当てはまりますが、関数が物の属性であるという考え方を理解することは、最初は直感的ではありません。私は初心者として検索するためのキーワードの良いセットを思い付くことは難しいと思ったでしょう。 –

答えて

3

Pythonのすべては、関数とメソッドを含むオブジェクトです。 x.upperは、upper属性のxです。この属性は、関数オブジェクトです。 x.upper()は、機能としてその属性を呼び出そうとした結果ですので、あなたは、Pythonで任意のオブジェクトを呼び出すだけでなく、機能しようとすることができ、余談として

print x.upper() 

をやろうとしています。それは常に機能するとは限りませんが、構文は合法です。あなたは

x = 5 
x() 

あるいは

5() 

を行うことができますが、もちろん、あなたはエラー(どちらの場合もまったく同じもの)を取得します。しかし、通常の関数のように、__call__メソッドを定義している限り、実際にはオブジェクトを関数として呼び出すことができます。あなたの例は実際には書き直すことができます

print x.upper.__call__() 
4

upper(および他のすべてのメソッドは)「を使用する準備ができて機能」、あなたが行うことができる方法のようなものです欲しいです:lambdaを使用して

x = 'bacon' 
x = x.upper() 
print x 

"ばかばかしい" 例:

upper_case = lambda x: x.upper() 
print(upper_case) # <function <lambda> at 0x7f2558a21938> 
print(upper_case('bacon')) # BACON 
+0

説明を追加してください! –

+0

あなたはメソッドupperを参照しましたが、それを呼び出さなかった... – Aaron

+0

これはうまくいきました、提案していただきありがとうございます。 x.upper()とx.upperの重要性は何ですか? – StmWtr