2012-03-22 43 views
11

Tôi gặp sự cố khi nhập gói scipy.special. Nó không có hại, chỉ gây phiền nhiễu/thú vị.scipy.special import issue

Khi tôi nhập scipy sử dụng import scipy as sp và sau đó cố gắng truy cập sp.special tôi nhận được:

>>> import scipy as sp 
>>> sp.special 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'special' 
>>> 

nhưng nếu tôi sau đó làm import scipy.special tôi có thể truy cập vào các mô-đun đặc biệt thông qua scipy.specialsp.special:

>>> import scipy as sp 
>>> import scipy.special 
>>> scipy.special 
<module 'scipy.special' from 'C:\Python27\lib\site-packages\scipy\special\__init__.pyc'> 
>>> sp.special 
<module 'scipy.special' from 'C:\Python27\lib\site-packages\scipy\special\__init__.pyc'> 
>>> 

Vì vậy, bây giờ tôi có mô-đun special có thể truy cập thông qua cả hai không gian tên spscipy. Điều thú vị là tôi có thể truy cập phần còn lại của scipy thông qua không gian tên scipy.

Câu hỏi đầu tiên: Tại sao mô-đun special không nhập lần đầu tiên?

Câu hỏi thứ hai: Làm cách nào tôi có thể truy cập vào mô-đun special chỉ qua không gian tên sp mà không cần xác định không gian tên scipy?

Chỉnh sửa: sử dụng Python 2.7.2 và scipy 0.10.1

Trả lời

15

Theo mặc định, "nhập khẩu scipy" không nhập bất kỳ gói phụ nào. Có quá nhiều gói con với các mô-đun mở rộng Fortran lớn tải chậm. Tôi không khuyên bạn nên làm import scipy hoặc viết tắt là import scipy as sp. Nó không chỉ rất hữu ích. Sử dụng from scipy import special, from scipy import linalg, v.v.

+0

Xin cảm ơn, tôi sẽ ghi nhớ điều đó trong tương lai. Có bất kỳ nơi nào trong tài liệu nêu rõ điều này không? Tôi không thể thấy nhận xét như vậy trong tài liệu [API] (http://docs.scipy.org/doc/scipy-0.10.1/reference/api.html) –

+1

Tôi biết đó là nhận xét cũ, nhưng đó là vẫn là Câu hỏi thường gặp, vì vậy, đây là một tài nguyên: http://docs.scipy.org/doc/scipy/reference/api.html#guidelines-for-importing-functions-from-scipy –