我最近遇到了一个我以前从未见过的语法,当我学习python时,在大多数教程中都没有,..符号,它看起来像这样:
f = 1..__truediv__ # or 1..__div__ for python 2
print(f(8)) # prints 0.125
Run Code Online (Sandbox Code Playgroud)
我认为它完全相同(当然除了它更长):
f = lambda x: (1).__truediv__(x)
print(f(8)) # prints 0.125 or 1//8
Run Code Online (Sandbox Code Playgroud)
但我的问题是:
这可能会在将来为我节省很多代码...... :)
我已经读过python中的所有东西都是一个对象,因此我开始尝试不同的类型并调用__str__它们 - 起初我感到非常兴奋,但后来我感到困惑.
>>> "hello world".__str__()
'hello world'
>>> [].__str__()
'[]'
>>> 3.14.__str__()
'3.14'
>>> 3..__str__()
'3.0'
>>> 123.__str__()
File "<stdin>", line 1
123.__str__()
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
something.__str__()除了"一切"之外还要工作int?123不是一个对象类型的int?由于一切都是python中的对象,甚至是文字,我们通常被允许直接在文字上调用方法.
例如:
'hello'.upper()
Run Code Online (Sandbox Code Playgroud)
从理论上讲,对于int literals来说,似乎应该允许同样的事情
例如:
4.bit_length()
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我不知道为什么.有任何想法吗?谢谢!
整数2有一个__add__方法:
>>> "__add__" in dir(2)
True
Run Code Online (Sandbox Code Playgroud)
...但是调用它会引发一个SyntaxError:
>>> 2.__add__(3)
File "<stdin>", line 1
2.__add__(3)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用这个__add__方法?
python ×4
python-3.x ×2
syntax ×2
int ×1
integer ×1
literals ×1
methods ×1
object ×1
operators ×1
python-2.7 ×1
python-2.x ×1
syntax-error ×1