我想实现一个函数,比如“foo”,以便它可以采用如下输入参数:
foo "test" 或 foo << "test", ...,即不涉及括号,而不是像调用内置函数 "print" 那样显式调用 foo("test")。
任何人都知道解决方案/提示?
谢谢。
在 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)
并不是说这是个好主意,但有时好主意来自玩这样的东西