Python 中 a.f()和 f(a)的区别是什么?

2019-09-30 16:57:36 +08:00
 Sillove

例如: print('V2EX'.len()) 和 print(len('V2EX')) 的值都是 4 这两个语句有什么区别呢?

2846 次点击
所在节点    问与答
12 条回复
ysc3839
2019-09-30 17:11:56 +08:00
>>> print('V2EX'.len())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'len'
Sillove
2019-09-30 17:16:02 +08:00
@ysc3839
len 前后有双下划线,好像是自动隐藏了。__len__
RickyHao
2019-09-30 17:17:58 +08:00
Google: Python Magic Method
请(
BingoXuan
2019-09-30 17:18:51 +08:00
应该是__len__()吧,len 只是调用入参的__len__()而已,一个语法糖函数

Object.method()和 function(Object)根本就是两个不同的调用,一个是调用对象绑定的方法,另一个是对象作为入参调用函数。虽然可以做到一样的功能,但范式是不一样的。
Sillove
2019-09-30 17:28:32 +08:00
@BingoXuan 多谢解答
Dvel
2019-09-30 17:36:25 +08:00

这段说的挺好的,《流畅的 Python 》。
love
2019-09-30 20:44:53 +08:00
@Dvel 前提是那为何 python 要把 len 整成一个函数调用?象 js 就直接 str.length 或 array.length 直接调属性了
renmu
2019-09-30 21:38:10 +08:00
别问,问就是优雅,Python 特性(笑,你可以去 Google 一下,作者有解释过
Xs0ul
2019-09-30 22:22:58 +08:00
在 pandas/numpy 里有 a.size 表示元素个数, a.shape 表示各维尺寸(类似 [3, 4])

而在 pytorch 里 a.shape 和 a.size()同义, 表示张量的各维大小,类似 [3, 4]. 而用 a.nelement()表示元素个数.

混着用的时候真的很坑
ochatokori
2019-09-30 22:42:16 +08:00
主题的下划线被当成 markdown 的语法渲染了,
评论区没有 markdown 就没有这个问题
msg7086
2019-10-01 04:10:59 +08:00
Python 里搞了特殊化而已。
hxse
2019-10-01 13:16:46 +08:00
主题区的 markdown 会渲染,但评论区不会???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX