Python:在.upper之后打印值

Python:在.upper之后打印值,python,python-2.7,Python,Python 2.7,我正在尝试打印所有大写字母的字符串。当我运行print命令时,它会打印x的类型和位置 为什么打印操作而不是结果 x = 'bacon' x = x.upper print x >>> <built-in method upper of str object at 0x02A95F60> x='bacon' x=x上 打印x >>> upper(以及所有其他方法)类似于“函数准备使用”,您可以这样做: x = 'bacon' x = x.upper print

我正在尝试打印所有大写字母的字符串。当我运行print命令时,它会打印x的类型和位置

为什么打印操作而不是结果

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

>>> 
<built-in method upper of str object at 0x02A95F60>
x='bacon'
x=x上
打印x
>>> 
upper
(以及所有其他方法)类似于“函数准备使用”,您可以这样做:

x = 'bacon'
x = x.upper
print x()
但最常见的,也是我认为你想要的方式是:

x = 'bacon'
x = x.upper()
print x
“荒谬”示例使用:

upper_case=lambda x:x.upper()
印刷品(大写)#
印刷品(大写(‘培根’)#培根

Python中的所有内容都是对象,包括函数和方法
x.upper
x
upper
属性,它恰好是一个函数对象
x.upper()
是尝试将该属性作为函数调用的结果,因此您正在尝试这样做

print x.upper()
另外,您可以尝试调用Python中的任何对象,而不仅仅是函数。它并不总是有效的,但语法是合法的。你能行

x = 5
x()
甚至

5()
但当然,您会得到一个错误(两种情况下的错误完全相同)。但是,只要对象定义了一个
\uuuu call\uuu
方法(就像普通函数一样),就可以将对象作为函数调用。您的示例实际上可以重写为

print x.upper.__call__()

请加上解释!这很有效,谢谢你的建议。x.upper()与x.upper的区别是什么?必须添加括号才能调用函数。您所做的是将x的upper方法复制到一个名为x的变量(覆盖它以前的值)StmWtr,当您在没有paren的情况下执行upper时,它只是对该方法的引用。添加它们实际上会执行它。@StmWtr将python中的函数想象成一台小型机器。当你打电话给
.upper
时,你是在说“嘿!给我拿那台机器”。但是当你打电话给
.upper()
时,你是在说“嘿!帮我用那台机器”。这是一个非常合理的问题。不知道你为什么会被否决。@Mad物理学家这是一件可以用。。。那是why@Aaron. 对于非常熟悉Python的人来说,这是正确的,但是在一开始就理解函数只是事物的一个属性的想法是不直观的。作为初学者,我会发现很难找到一组好的关键字来搜索。
print x.upper.__call__()