2012-09-25 20 views
6

Có sự khác biệt, tinh tế hoặc không quá tinh tế, giữa các tác động của các báo cáo nhập khẩu sau đây không? Tôi đã tìm thấy cả hai được sử dụng trong các chương trình ví dụ và chắc chắn đủ, cả hai đều có vẻ làm việc. Nó sẽ chống lại hạt của Python "chỉ có một cách để làm công cụ" nếu chúng hoàn toàn tương đương với chức năng, vì vậy tôi bối rối. Tôi chỉ mới bắt đầu bằng Python và cố gắng giữ thói quen tốt. Vì vậy, ví dụ, đối với các mô-đun Nội suy trong gói scipy ...Cách Pythonic để nhập mô-đun từ các gói

from scipy import interpolate as spi 

hoặc

import scipy.interpolate as spi 

cả dường như đặt các module Nội suy trong không gian tên hiện tại như spi

Trả lời

0

Đó là vấn đề về hương vị, thực sự.

Trong trường hợp cụ thể này, tôi sẽ sử dụng import scipy.interpolate as spi, để nhớ rằng interpolate là một mô-đun con của scipy. Nếu tôi nhập một hàm từ một mô-đun, tôi sẽ sử dụng from module import function.

Điều duy nhất là, phù hợp với quy ước bạn chọn.

+0

Tôi thích kiểu "import package.module as shortname", nhưng tự hỏi liệu "từ mô-đun nhập gói" có bất kỳ điều gì để giới thiệu nó hay không. Tôi không "từ chức năng nhập khẩu mô-đun" cho dù đổi tên nó hay không, như tôi muốn có khả năng hiển thị của mô-đun và tên chức năng trong mã của tôi. Vì vậy, có vẻ như "nhập full_module_name là shortname", cho dù full_module_name có tiền tố gói hay không, là cách nhất quán để làm điều đó. Tôi sử dụng một tập hợp các tên ngắn gọn, dường như có nhiều nguồn: - np, sp, tk, plt chẳng hạn, npr cho numpy.random, v.v. –

10

Không, không có sự khác biệt giữa hai câu lệnh, cả hai đặt cùng một đối tượng chính xác vào không gian tên mô-đun của bạn (globals()), dưới cùng một tên chính xác.

Chúng hoạt động theo những cách hơi khác nhau nhưng kết quả cuối cùng giống nhau.

Về cơ bản, là người đầu tiên thực hiện:

from scipy import interpolate 
spi = interpolate 
del interpolate 

và thứ hai đi xuống đến

import scipy.interpolate 
spi = scipy.interpolate 
del scipy 

và cuối cùng tất cả các bạn có là tên spi ràng buộc với interpolate chức năng.

Cá nhân, tôi sẽ không đổi tên các chức năng như vậy, tôi muốn giữ nó như import scipy và sử dụng scipy.interpolate, giao tiếp rõ nơi các đối tượng đến từ khắp các mã, hoặc Tôi muốn sử dụng from scipy import interpolate.

Đổi tên đối tượng có thể giúp bạn nhập dễ dàng hơn, nhưng có thể khiến bạn hoặc người khác khó khăn hơn khi bạn truy cập lại mã này sau nhiều tháng vắng mặt.

+0

Tôi nên làm cho nó rõ ràng hơn rằng nội suy là mô-đun, không phải là hàm. Tôi kết thúc bằng cách sử dụng f = spi.interp1d (... –

+0

@Neil_UK: bình luận vẫn được áp dụng, thời tiết đó là một mô-đun hoặc một hàm. :-) Điều chỉnh từ ngữ. –

Các vấn đề liên quan