poi*_*oae 15 python literals operator-keyword
可能重复:
访问python int literals方法
在Python中everything is an object.
但话又说回来,为什么下面的代码片段不起作用?
1.__add__(2)
Run Code Online (Sandbox Code Playgroud)
但是,这确实有效:
n = 1
n.__add__(2)
Run Code Online (Sandbox Code Playgroud)
n和之间有什么区别1?
这不是一个设计失败,它不起作用?例如,它也适用于string文字.
"one".__add__("two")
Run Code Online (Sandbox Code Playgroud)
相比之下,它也适用于其他纯面向对象的语言.
让我们仔细看看这个编译c#示例:
Console.WriteLine(100.ToString());
Run Code Online (Sandbox Code Playgroud)
那么,Python从什么C#角度来区别everything is an object?
lvc*_*lvc 33
Python的解析器故意非常简单 - 它对自身强制执行的约束之一是,为了弄清楚令牌的含义,它只能向右看一个令牌(它是一个LL(1)解析器).
因此,它看到[number] [dot],并确定它是一个浮点文字.'_'在浮点文字中不是有效字符,因此它会产生语法错误.
克服这个问题的最明显和最常见的方法是将数字放在括号中:
(1).__add__(2)
Run Code Online (Sandbox Code Playgroud)
这会强制它1在解析器的限制内将其解释为整数文字,将点解释为属性访问.
另一个有趣的解决方法是:
>>> 1 .__add__(2)
3
Run Code Online (Sandbox Code Playgroud)
也就是说,在之前添加一个空格..事实证明,Python总是允许在那里进行任何属性查找:
>>> range(4) .count(3)
1
Run Code Online (Sandbox Code Playgroud)
我发现这非常令人惊讶,但似乎Python .在类似的规则下处理+,因此将允许尽可能多的空间围绕它.
app*_*tor 10
Python解释1.为float,因此您必须添加parens:
>>> (1).__add__(2)
3
Run Code Online (Sandbox Code Playgroud)
或空间:
>>> 1 .__add__(2)
3
Run Code Online (Sandbox Code Playgroud)
如果你想浮动值,这里只需要2个点.
>>> 1..__add__(2) #float
3.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |