2011-09-05 24 views
5

en Python 2.7, mediante el uso dePython __future__ de un módulo específico

from __future__ import division, print_function 

I puede tener ahora print(1/2) mostrando 0.5.

Sin embargo, ¿es posible importar esto automáticamente al inicio de Python?

He intentado utilizar el módulo especial sitecustomize.py, pero la entrada solo es válida dentro del módulo y no en el shell.

Como estoy seguro la gente preguntará por qué lo necesito: enseñando Python a adolescentes Noté que la división de enteros no era fácil para ellos, así que decidimos cambiar a Python 3. Sin embargo, uno de los requisitos del curso era poder trazar la función y Matplotlib es bastante bueno, pero solo válido para Python 2.7.

Así que mi idea era usar una instalación personalizada de 2.7 ... no perfecta, pero no tengo una mejor idea para tener tanto Matplotlib como la nueva división "natural" "1/2 = 0.5".

¿Alguna sugerencia o tal vez una alternativa de Matplotlib que funcione en python 3.2?

Respuesta

6

matplotlib en python 3 está más cerca de lo que piensas: https://github.com/matplotlib/matplotlib-py3; http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib.

¿Por qué no utilizar PYTHONSTARTUP en lugar de sitecustomize.py?

localhost-2:~ $ cat startup.py 
from __future__ import print_function 
from __future__ import division 
localhost-2:~ $ export PYTHONSTARTUP="" 
localhost-2:~ $ python 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1/2 
0 
>>> print("fred",end=",") 
    File "<stdin>", line 1 
    print("fred",end=",") 
        ^
SyntaxError: invalid syntax 
>>> ^D 
localhost-2:~ $ export PYTHONSTARTUP=startup.py 
localhost-2:~ $ python 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1/2 
0.5 
>>> print("fred",end=",") 
fred,>>> 
+0

Sí que he visto el trabajo se ha iniciado hace 4 meses, pero yo no se las arregla para instalar manualmente numpy (en mi computadora de 64 bits) así que terminé usando este paquete: http://www.enthought.com/products/epd_free.php Voy a intentar PYTHONSTARTUP –

+0

'PYTHONSTARTUP' es definitivamente el camino a seguir. –

0

Puede que no sea práctico, pero es posible que pueda compilar un Python personalizado con el comportamiento de la división de Python 3. El problema con esto es matplotlib podría requerir el comportamiento de Python 2 (aunque no estoy seguro).

2

No es necesario compilar una nueva versión de Python 2.x. Usted puede hacer esto en el arranque.

Como has encontrado, sitecustomize.py no funciona. Esto se debe a que from __future__ import IDENTIFIERno es una importación. Marca el módulo que se compilará bajo reglas especiales. Cualquier módulo que use esas características debe tener la importación __future__, así como la consola interactiva.

El siguiente comando shell se iniciará la consola interactiva con division y print_function activa:

python -ic "from __future__ import division, print_function" 

Usted podría alias para python (en Linux) o configurar un lanzador para ocultar el material extra.

Si está utilizando IDLE, la secuencia de comandos PYTHONSTARTUP @DSM sugiere que debería funcionar allí también.

Tenga en cuenta que estos no son globales en todo el intérprete, solo afectan a la consola interactiva. Los módulos en el sistema de archivos deben importar desde __future__ explícitamente para usar la función.Si esto es un problema, sugiero hacer una plantilla para el trabajo fuera de la base de todas las importaciones necesarias:

# True division 
from __future__ import division 

# Modules 
import matplotlib 

# ... code ... 

def main(): 
    pass 

if __name__ == "__main__": 
    main() 
Cuestiones relacionadas