Python:将print函数作为参数发送

时间:2014-01-31 17:57:04

标签: python

我的教授曾提到可以将print等函数作为参数传递,但是当我尝试实际实现它时,我会收到语法错误。这是我在这里失踪的小事吗?

 def goTime(sequence, action):
    for element in sequence:
       action(element)

 def main():
    print("Testing Begins")
    test = list ( range( 0 , 20, 2) ) 
    goTime(test, print)
    print("Testing Complete")

运行以下命令后,我收到此语法错误:

goTime(test, print)
                 ^
SyntaxError: invalid syntax

如果我定义了自己的使用print的函数,它的工作原理如下:

def printy(element):
   print(element)

def goTime(sequence, action):
   for element in sequence:
      action(element)

def main():
   print("Testing Begins")
   test = list ( range( 0 , 20, 2) ) 
   goTime(test, printy)
   print("Testing Complete")

4 个答案:

答案 0 :(得分:5)

在Python 3中,开箱即用。但是,在Python 2.7中,你可以这样做:

from __future__ import print_function
def foo(f,a):
    f(a)

foo(print,2)
2

请注意,在执行from __future__ import print_function之后的Python2.7中,您将无法再像关键字一样使用print

>>> from __future__ import print_function
>>> print 'hi'
  File "<stdin>", line 1
    print 'hi'
             ^
SyntaxError: invalid syntax

虽然我认为你的教授只想说明Python中的函数是一等公民(即:对象),并且它们可以作为任何其他变量传递。他使用了一个有争议的例子:)

希望这有帮助!

答案 1 :(得分:1)

你不能在Python2中传递print,因为它是关键词而不是函数。这在Python3中是可能的。

您可以尝试从以后导入新的打印功能。检查这个问题:

How to gracefully deal with failed future feature (__future__) imports due to old interpreter version?

然后您可以将其用作函数。

答案 2 :(得分:0)

您可以尝试sys.stdout

import sys

def printy(element):
    sys.stdout.write(str(element)+'\n')

答案 3 :(得分:0)

在 python2 中,您可以将 print 包装在包装函数内并传递:

def PrintWrapper(arg):
    print(arg)

def MyFunc(x, func):
    func(x)

# call the function with the wrapper as an argument
MyFunc("Hello world", PrintWrapper)