0

我想实现一个函数,比如“foo”,以便它可以采用如下输入参数:

foo "test" 或 foo << "test", ...,即不涉及括号,而不是像调用内置函数 "print" 那样显式调用 foo("test")。

任何人都知道解决方案/提示?

谢谢。

4

1 回答 1

3

在 Python2 中,print不是一个函数,而是一个语句,所以它可以打破通常的规则。

__lshift__但是,您可以使用和__rshift__方法编写一个类

class X(object):

    def __lshift__(self, n):
        print "<< "*n

    def __rshift__(self, n):
        print ">> "*n

可以让这些方法做任何你喜欢的事情

>>> X() << 5
<< << << << << 
>>> X() >> 10
>> >> >> >> >> >> >> >> >> >> 

所以你可以像这样模拟你的呼叫想法

class X(object):

    def __call__(self, *args, **kw):
        print "called with ", args, kw

    def __lshift__(self, n):
        return self(n)

并不是说这是个好主意,但有时好主意来自玩这样的东西

于 2013-08-22T02:36:36.350 回答