Nhập biến từ tệp khác?


134

Làm cách nào để nhập biến từ tệp này sang tệp khác?

ví dụ: file1có các biến x1x2làm thế nào để chuyển chúng đến file2?

Làm cách nào tôi có thể nhập tất cả các biến từ cái này sang cái khác?

Câu trả lời:


146
from file1 import *  

sẽ nhập tất cả các đối tượng và phương thức trong file1


54
Hãy lưu ý, tuy nhiên, đây thường là điều bạn không nên làm .
David Cain

7
Như David lưu ý, điều này gây ô nhiễm không gian tên và có thể gây ra hậu quả thảm khốc bằng cách che dấu các đối tượng và chức năng từ các mô-đun khác, bao gồm cả các mô-đun trong bản phân phối tiêu chuẩn
ennuikiller

11
Tôi đã cố gắng thực hiện nhưng có vẻ như trăn không thể tìm thấy tệp1 , vì tôi đang gặp lỗi này:ImportError: No module named file1
Hilder Vitor Lima Pereira

4
Bạn đã có một __init__.pytập tin? Xem ở đây để biết thêm chi tiết.
J0ANMM

76

Nhập khẩu file1bên trong file2:

Để nhập tất cả các biến từ tệp1 mà không làm ngập không gian tên của tệp2, hãy sử dụng:

import file1

#now use file1.x1, file2.x2, ... to access those variables

Để nhập tất cả các biến từ tệp1 sang không gian tên của tệp2 (không được khuyến nghị):

from file1 import *
#now use x1, x2..

Từ các tài liệu :

Mặc dù nó là hợp lệ để sử dụng from module import *ở cấp độ mô-đun, nó thường là một ý tưởng tồi. Đối với một, điều này làm mất một thuộc tính quan trọng mà Python có - bạn có thể biết mỗi tên toplevel được xác định bởi một hàm tìm kiếm đơn giản trong một trình soạn thảo yêu thích của bạn. Bạn cũng tự mở ra rắc rối trong tương lai, nếu một số mô-đun phát triển các chức năng hoặc lớp bổ sung.


1
và nếu tôi có 1000 biến để vượt qua?
Ofek

1
@Ofek Chỉ cần sử dụng import file1 sau đó.
Ashwini Chaudhary

1
Nó không nhập các biến: \
Ofek

7
nó không nhập các biến, mặc dù bạn sẽ phải trả trước file1.varXcho mỗi tệp.
zmo

43

Tốt nhất để nhập x1x2 một cách rõ ràng:

from file1 import x1, x2

Điều này cho phép bạn tránh xung đột không gian tên không cần thiết với các biến và hàm từ file1khi làm việc file2.

Nhưng nếu bạn thực sự muốn, bạn có thể nhập tất cả các biến:

from file1 import * 

11

Trên thực tế, điều này không thực sự giống nhau để nhập một biến với:

from file1 import x1
print(x1)

import file1
print(file1.x1)

Rõ ràng tại thời điểm nhập x1 và file1.x1 có cùng giá trị, chúng không phải là cùng một biến. Chẳng hạn, gọi một hàm trong tệp1 sửa đổi x1 và sau đó thử in biến từ tệp chính: bạn sẽ không thấy giá trị được sửa đổi.


5

Marc trả lời đúng. Trên thực tế, bạn có thể in địa chỉ bộ nhớ cho các biến print(hex(id(libvar))và bạn có thể thấy các địa chỉ khác nhau.

# mylib.py
libvar = None
def lib_method():
    global libvar
    print(hex(id(libvar)))

# myapp.py
from mylib import libvar, lib_method
import mylib

lib_method()
print(hex(id(libvar)))
print(hex(id(mylib.libvar)))

3

script1.py

title="Hello world"

script2.py là nơi chúng tôi sử dụng biến script1

Cách 1:

import script1
print(script1.title)

Cách 2:

from script1 import title
print(title)

1

Trong Pythonbạn có thể truy cập nội dung của các tệp khác như thể chúng
là một loại thư viện, so với các ngôn ngữ khác như java hoặc bất kỳ ngôn ngữ cơ bản oop nào, Điều này thực sự tuyệt vời;

Điều này làm cho việc truy cập nội dung của tệp hoặc nhập tệp để xử lý tệp hoặc làm bất cứ điều gì với nó; Và đó là lý do chính tại sao PythonNgôn ngữ được ưa thích cao cho Khoa học dữ liệu và Học máy, v.v .;

Và đây là hình ảnh của project structure Điều này

Nơi tôi đang truy cập các biến từ .env filenơi khóa API linksvà khóa bí mật cư trú.

Cấu trúc chung:

from <File-Name> import *

0

đầu tiên:

a=5

giây:

import first
print(first.a)

Kết quả sẽ là 5.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.