在python 2.7中,使用
from __future__ import division, print_function
我现在可以print(1/2)
显示0.5
。
但是可以在python启动时自动导入吗?
我尝试使用sitecustomize.py
特殊模块,但是inport仅在模块内有效,而不在shell中。
我确信人们会问为什么我需要这个:向青少年教授Python我注意到整数划分对他们来说并不容易,所以我们决定切换到Python 3.然而,课程的要求之一就是能够绘制函数并且Matplotlib非常好但仅对Python 2.7有效。
所以我的想法是使用自定义2.7安装...不完美但我没有更好的想法让Matplotlib和新的“自然”分区“1/2 = 0.5”。
任何建议或可能是在python 3.2上运行的Matplotlib替代方案?
答案 0 :(得分:6)
python 3上的matplotlib比您想象的更接近:https://github.com/matplotlib/matplotlib-py3; http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib
为什么不使用PYTHONSTARTUP而不是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,>>>
答案 1 :(得分:2)
无需编译新版本的Python 2.x.您可以在启动时执行此操作。
如您所见,sitecustomize.py不起作用。这是因为from __future__ import IDENTIFIER
不是导入。它标记要在特殊规则下编译的模块。使用这些功能的任何模块都必须具有__future__
导入以及交互式控制台。
以下shell命令将启动交互式控制台,其中division
和print_function
处于活动状态:
python -ic "from __future__ import division, print_function"
你可以别名python
(在Linux上)或设置一个启动器来隐藏额外的东西。
如果您使用IDLE,@ DSM建议的PYTHONSTARTUP
脚本也应该在那里工作。
请注意,这些在整个解释器中不是全局的,它只会影响交互式控制台。文件系统上的模块必须明确地从__future__
导入才能使用该功能。如果这是一个问题,我建议制作一个模板,以便根据所有需要的导入进行工作:
# True division
from __future__ import division
# Modules
import matplotlib
# ... code ...
def main():
pass
if __name__ == "__main__":
main()
答案 2 :(得分:0)
这可能不实用,但您可以编译自定义Python,并将Python 3分割行为反向移植。问题是matplotlib
可能需要Python 2行为(虽然我不确定)。