## page was renamed from zhArticleTemplate ##language:zh #pragma section-numbers on 返回::'''[[self:PyIAQ|Python 罕见问题集]]''' ::-- [[huangyi]] [<>] <> ::-- ZoomQuiet [<>] <> = 问:f(*m)这个技巧确实不错。不知道这个语法是否可以用在方法调用上, 比如 x.f(*y)? = ''Q: The f(*m) trick is cool. Does the same syntax work with method calls, like x.f(*y)?'' This question reveals a common misconception. There is no syntax for method calls! There is a syntax for calling a function, and there is a syntax for extracting a field from an object, and there are bound methods. Together these three features conspire to make it look like x.f(y) is a single piece of syntax, when actually it is equivalent to (x.f)(y), which is equivalent to (getattr(x, 'f'))(y). I can see you don't believe me. Look: {{{#!python class X: def f(self, y): return 2 * y >>> x = X() >>> x.f > >>> y = 21 >>> x.f(y) 42 >>> (x.f)(y) 42 >>> (getattr(x, 'f'))(y) 42 >>> xf = x.f >>> xf(y) 42 >>> map(x.f, range(5)) [0, 2, 4, 6, 8] }}}