Sillove
V2EX  ›  问与答

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

  •  
  •   Sillove · Sep 30, 2019 · 3646 views
    This topic created in 2592 days ago, the information mentioned may be changed or developed.

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

    12 replies  •  2019-10-01 13:16:46 +08:00
    ysc3839
    ysc3839
    Sep 30, 2019
    1
    >>> print('V2EX'.len())
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'len'
    Sillove
    Sillove
    OP
    Sep 30, 2019
    2
    @ysc3839
    len 前后有双下划线,好像是自动隐藏了。__len__
    RickyHao
    RickyHao
    Sep 30, 2019 via Android
    3
    Google: Python Magic Method
    请(
    BingoXuan
    BingoXuan
    Sep 30, 2019
    4
    应该是__len__()吧,len 只是调用入参的__len__()而已,一个语法糖函数

    Object.method()和 function(Object)根本就是两个不同的调用,一个是调用对象绑定的方法,另一个是对象作为入参调用函数。虽然可以做到一样的功能,但范式是不一样的。
    Sillove
    Sillove
    OP
    Sep 30, 2019
    5
    @BingoXuan 多谢解答
    Dvel
    Dvel
    Sep 30, 2019❤️1
    6

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

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

    混着用的时候真的很坑
    ochatokori
    ochatokori
    Sep 30, 2019 via Android
    10
    主题的下划线被当成 markdown 的语法渲染了,
    评论区没有 markdown 就没有这个问题
    msg7086
    msg7086
    Oct 1, 2019
    11
    Python 里搞了特殊化而已。
    hxse
    hxse
    Oct 1, 2019
    12
    主题区的 markdown 会渲染,但评论区不会???
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2499 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    ♥ Do have faith in what you're doing.