2017-05-19 5 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") 
) 

질문> 줄 바꿈없이 Cython으로 인쇄하는 방법? Cython에서 줄 바꿈없이 형식 변수를 인쇄하는 방법

+0

직접 테스트하지는 않았지만 버그처럼 보입니다. https://github.com/cython/cython/issues – DavidW

+1

에서보고하는 것이 좋습니다. 또한 Cython 테스트 케이스에서'end ='를 사용하는 것처럼 보입니다 : https://github.com/cython/cython/blob /a0bbb940c847dfe92cac446c8784c34c28c92836/tests/run/print_function.pyx. 유일한 차이점은 빈 문자열이 아닌 공백을 사용하는 것 같습니다. – DavidW

+0

@DavidW, 의견을 보내 주셔서 감사합니다. 수정은 'from __future__ import print_function' 라인을 포함시키는 것입니다. 다른 변경은 필요하지 않습니다. – q0987

답변

0

테스트 손 사이 썬을하지 마십시오 감사하지만, 표준 출력에 직접 인쇄 트릭을 할 에게서는 :

import sys 

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

가 개행 문자를 인쇄 싶지 않아? py2에서

:

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

py3에서 :

print(item, end='') 

사이 썬의 컴파일은 py2 구문 기본입니다. 하나의 사용 구문이 py3에서만 유효한 경우 컴파일시 language_level=3 또는 명령 줄에서 cython -3 또는 jupyter 노트북에서 %%cython -3을 명시 적으로 지정해야합니다.

더 많은 것은 cython에서 py2 구문을 작성할 수 있지만 py3 헤더와 라이브러리에 연결하면 py2를 py3으로 쉽게 포팅 할 수 있습니다.