2009-04-03 31 views
101

Nếu bạn có tập hợp các phương thức trong một tệp, có cách nào để bao gồm các tệp đó trong một tệp khác không, nhưng hãy gọi cho chúng mà không có bất kỳ tiền tố nào (ví dụ: tiền tố tệp)?Cách bao gồm mã Python bên ngoài để sử dụng trong các tệp khác?

Vì vậy, nếu tôi có:

[Math.py] 
def Calculate (num) 

Làm thế nào để gọi nó là như thế này:

[Tool.py] 
using Math.py 

for i in range (5) : 
    Calculate (i) 

Trả lời

142

Bạn sẽ cần phải nhập khẩu các tập tin khác như là một mô-đun như thế này:

import Math 

Nếu bạn không muốn tiền tố chức năng Calculate của bạn với tên mô-đun sau đó làm điều này:

from Math import Calculate 

Nếu bạn muốn nhập tất cả thành viên của một mô-đun, hãy làm như sau:

from Math import * 

Chỉnh sửa:Here is a good chapter từ Dive Into Python đi sâu hơn một chút về chủ đề này.

+5

Đáng chú ý rằng 'từ nhập khẩu toán học *' là [không khuyến khích] (https://www.python.org/dev/peps/pep-0008/#imports). – naught101

+1

Bạn có thể thú vị 'imp' mô-đun và ma thuật gọi' __import__'. –

32

Nếu bạn sử dụng:

import Math 

sau đó sẽ cho phép bạn sử dụng Math của nhưng bạn phải làm Math.Calculate, vì vậy đó rõ ràng là những gì bạn không muốn.

Nếu bạn muốn nhập các chức năng của một mô-đun mà không cần phải thêm tiền tố họ, bạn phải đặt tên một cách rõ ràng họ, như:

from Math import Calculate, Add, Subtract 

Bây giờ, bạn có thể tham khảo Tính, Thêm, và Trừ chỉ bằng tên của họ. Nếu bạn muốn nhập TẤT CẢ các hàm từ Math, hãy làm:

from Math import * 

Tuy nhiên, bạn phải rất cẩn thận khi thực hiện việc này với các mô-đun có nội dung bạn không chắc chắn. Nếu bạn nhập hai mô-đun chứa các định nghĩa cho cùng một tên hàm, một hàm sẽ ghi đè lên các mô-đun khác, với bạn không có gì khôn ngoan hơn.

37

Chỉ cần viết "bao gồm" lệnh:

import os 

def include(filename): 
    if os.path.exists(filename): 
     execfile(filename) 


include('myfile.py') 

@Deleet:

@bfieck nhận xét là đúng, cho python 2 và 3 tương thích, bạn cần một trong hai:

Python 2 và 3: thay thế 1

from past.builtins import execfile 

execfile('myfile.py') 

Python 2 và 3: thay thế 2

exec(compile(open('myfile.py').read())) 
+2

Có lý do nào để thực hiện điều này qua 'từ nhập mô-đun *' không? Ngoài ra, nếu tệp bạn đang gọi có mã trong nội dung, mã đó sẽ được chạy, nếu bạn làm điều này. – naught101

+4

@ naught101: Đó là mục tiêu: để chạy mã, điều này không xảy ra khi nhập. Bình thường, nó chỉ xác định các biến. – Louis

+0

Điều này không phù hợp với tôi. bao gồm (tên tệp) 1 def bao gồm (tên tệp): 2 nếu os.path.exists (tên tệp): ----> 3 exec (filename) trong () NameError: tên 'thử' không được định nghĩa Chạy ipython 3.4. – Deleet

0

Tôi đã tìm thấy python kiểm tra module để thể rất hữu ích

Ví dụ với teststuff.py

import inspect 

def dostuff(): 
    return __name__ 

DOSTUFF_SOURCE = inspect.getsource(dostuff) 

if __name__ == "__main__": 

    dostuff() 

Và từ kịch bản khác hoặc python console

import teststuff 

exec(DOSTUFF_SOURCE) 

dostuff() 

Và bây giờ doStuff phải ở trong phạm vi địa phương và doStuff() sẽ trở lại giao diện điều khiển hoặc các kịch bản _ name _ trong khi thi hành test.dostuff() sẽ trả về tên mô-đun python.

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