2014-01-31 3 views
5

Мой профессор упомянул, что в качестве параметра можно передавать функции типа print, но когда я пытаюсь их реализовать, я получаю синтаксическую ошибку. Это что-то маленькое, что мне здесь не хватает?Python: отправка функции печати в качестве параметра

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 

Если я определяю свою собственную функцию, которая использует печать, он работает, как так:

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") 
+9

какую версию питона? 'print' является только функцией в 3. – roippi

+4

@roippi, вы также можете делать' из __future__ import print_function', чтобы получить его в более ранних версиях. –

+0

Бах, я использовал более старую версию. Глупая ошибка, спасибо, ребята. –

ответ

1

Вы можете 't передать print в Python2, потому что это ключевое слово, а не функция. Это возможно в Python3.

Вы можете попробовать импортировать новую функцию печати из будущего. Проверить этот вопрос:

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

, а затем вы можете использовать его в качестве функции.

5

В Python 3, который будет работать из коробки. В Python 2.7 однако, вы можете сделать:

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

foo(print,2) 
2 

Обратите внимание, что в python2.7 после вы from __future__ import print_function вы не сможете использовать print как ключевое слово больше:

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

Хотя я подумайте, что ваш профессор только хотел указать, что функции в Python - это первоклассные граждане (т. е. объекты), и они могут передаваться как любая другая переменная. Он использовал спорный пример, хотя :)

Надеюсь, это поможет!

+2

Я не думаю, что вам нужны тики вокруг 'print_function'. –

+0

@MarkRansom Lol, определенно не нужен. Извини за это :) –

0

Вы можете попробовать sys.stdout

import sys 

def printy(element): 
    sys.stdout.write(str(element)+'\n') 
Смежные вопросы