2017-05-19 1 views
0
$ cython --version 
Cython version 0.25.2 
$ python --version 
Python 3.5.1 

$ python setup.py build_ext -i 

Error compiling Cython file: 
------------------------------------------------------------ 
... 
def say_hello_to(name): 
    print("Hello %s!" % name, end='') 
           ^
------------------------------------------------------------ 

hello.pyx:2:33: Expected ')', found '=' 

$ cat hello.pyx 
def say_hello_to(name): 
    print("Hello %s!" % name, end='') 
    print("Hello ", end='') 

$ cat setup.py 
from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    name = 'hello', 
    ext_modules = cythonize("hello.pyx") 
) 

Question> Comment imprimer en Cython sans retour à la ligne?Comment imprimer la variable de format sans retour à la ligne en Cython

Merci

+0

Je ne l'ai pas testé moi-même mais cela ressemble à un bug. Il peut être utile de rapporter à https://github.com/cython/cython/issues – DavidW

+1

De plus, il semble que l'utilisation de 'end =' soit dans les cas de test Cython: https://github.com/cython/cython/blob /a0bbb940c847dfe92cac446c8784c34c28c92836/tests/run/print_function.pyx. La seule différence est qu'ils semblent utiliser un espace plutôt qu'une chaîne vide – DavidW

+0

@DavidW, merci pour votre suggestion. Le correctif consiste à inclure la ligne 'from __future__ import print_function'. Aucun autre changement n'est requis – q0987

Répondre

0

N'avez Cython à portée de main pour tester, mais l'impression directe à stdout devrait faire l'affaire:

import sys 

sys.stdout.write("Hello %s!" % name) 
0

Vous ne voulez pas imprimer une nouvelle ligne?

En py2:

print item, # the comma ',' does the trick. 

En PY3:

print(item, end='') 

est par défaut Cython compilation à la syntaxe py2. Si on utilise une syntaxe valide uniquement dans py3, alors lors de la compilation, language_level=3 dans la configuration, ou cython -3 dans la ligne de commande, ou %%cython -3 dans le cahier jupyter doit être explicitement donné.

Encore une chose, on peut écrire la syntaxe py2 en cython, mais en la reliant à l'en-tête et à la bibliothèque py3, c'est un moyen facile de porter py2 à py3.