2011-09-05 28 views
5

Trong python 2.7, bằng cách sử dụngPython __future__ bên ngoài của một module cụ thể

from __future__ import division, print_function 

bây giờ tôi có thể có print(1/2) thấy 0.5.

Tuy nhiên, có thể tự động nhập này khi khởi động python không?

Tôi đã cố sử dụng mô-đun đặc biệt sitecustomize.py nhưng cổng vào chỉ hợp lệ bên trong mô-đun và không có trong vỏ. Tôi chắc rằng mọi người sẽ hỏi tại sao tôi cần điều đó: dạy Python cho thanh thiếu niên Tôi nhận thấy rằng việc phân chia số nguyên không dễ dàng cho họ vì vậy chúng tôi quyết định chuyển sang Python 3. Tuy nhiên, một trong những yêu cầu của khóa học là để có thể vẽ hàm và Matplotlib là khá tốt nhưng chỉ hợp lệ cho Python 2.7. Vì vậy, ý tưởng của tôi là sử dụng cài đặt 2.7 tùy chỉnh ... không hoàn hảo nhưng tôi không có ý tưởng tốt hơn là có cả Matplotlib và bộ phận "tự nhiên" mới "1/2" 0,5 ".

Bất kỳ lời khuyên nào hoặc có thể là lựa chọn thay thế Matplotlib đang hoạt động trên trăn 3.2?

Trả lời

6

matplotlib trên python 3 gần hơn bạn có thể nghĩ: https://github.com/matplotlib/matplotlib-py3; http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib.

Tại sao không sử dụng PYTHONSTARTUP thay vì 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

Có tôi đã xem công việc đã bắt đầu cách đây 4 tháng nhưng tôi không quản lý cài đặt theo cách thủ công (trên máy tính 64bits của tôi) vì vậy tôi đã sử dụng gói này: http://www.enthought.com/products/epd_free.php Tôi sẽ thử PYTHONSTARTUP –

+0

'PYTHONSTARTUP' chắc chắn là con đường để đi. –

0

Điều này có thể không thực tế, nhưng bạn có thể biên dịch một Python tùy chỉnh với hành vi phân chia Python 3 trở về sau. Vấn đề với điều này là matplotlib có thể yêu cầu hành vi Python 2 (mặc dù tôi không chắc chắn).

2

Không cần phải biên dịch phiên bản Python mới 2.x. Bạn có thể thực hiện việc này khi khởi động.

Như bạn thấy, sitecustomize.py không hoạt động. Điều này là do from __future__ import IDENTIFIERkhông phải là một lần nhập. Nó gắn cờ mô-đun được biên dịch theo các quy tắc đặc biệt. Bất kỳ mô-đun nào sử dụng các tính năng đó phải có nhập __future__ cũng như bảng điều khiển tương tác.

Lệnh vỏ sau sẽ khởi chạy giao diện tương tác với divisionprint_function hoạt động:

python -ic "from __future__ import division, print_function" 

Bạn có thể bí danh để python (trên Linux) hoặc thiết lập một launcher ẩn nội dung thêm.

Nếu bạn đang sử dụng IDLE, đoạn mã PYTHONSTARTUP @DSM gợi ý cũng nên hoạt động ở đó.

Lưu ý rằng đây không phải là toàn cầu trong suốt phiên dịch, nó chỉ ảnh hưởng đến bảng điều khiển tương tác. Các mô-đun trên hệ thống tệp phải nhập từ __future__ một cách rõ ràng để sử dụng tính năng này.Nếu đây là vấn đề, tôi khuyên bạn nên tạo mẫu để làm việc cơ bản với tất cả các mục nhập cần thiết:

# True division 
from __future__ import division 

# Modules 
import matplotlib 

# ... code ... 

def main(): 
    pass 

if __name__ == "__main__": 
    main() 
Các vấn đề liên quan