การนำเข้าตัวแปรจากไฟล์อื่น?


134

ฉันจะนำเข้าตัวแปรจากไฟล์หนึ่งไปยังอีกไฟล์ได้อย่างไร

ตัวอย่าง: file1มีตัวแปรx1และx2วิธีส่งผ่านไปยังfile2อะไร

ฉันจะนำเข้าทั้งหมดของตัวแปรจากที่หนึ่งไปยังอีก?

คำตอบ:


146
from file1 import *  

จะนำเข้าวัตถุและวิธีการทั้งหมดใน file1


54
Do ทราบ แต่นี้โดยทั่วไปสิ่งที่คุณไม่ควรทำ
David Cain

7
ขณะที่เดวิดบันทึกมลพิษนี้ namespace และสามารถมีผลกระทบภัยพิบัติโดยปิดบังวัตถุและฟังก์ชั่นจากโมดูลอื่น ๆ รวมทั้งผู้ที่อยู่ใน distro มาตรฐาน
ennuikiller

11
ผมพยายามที่จะทำมัน แต่ดูเหมือนว่างูหลามไม่สามารถหาfile1เพราะฉันได้รับข้อผิดพลาดนี้:ImportError: No module named file1
Hilder Vitor ลิมารา

4
คุณมี__init__.pyไฟล์ไหม ดูที่นี่สำหรับรายละเอียดเพิ่มเติม
J0ANMM

76

นำเข้าfile1ภายในfile2:

ในการนำเข้าตัวแปรทั้งหมดจาก file1 โดยไม่ทำให้ namespace ของ file2 ท่วมให้ใช้:

import file1

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

วิธีอิมพอร์ตตัวแปรทั้งหมดจาก file1 ไปยังเนมสเปซของ file2 (ไม่แนะนำ):

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

จากเอกสาร :

ในขณะที่มันถูกต้องที่จะใช้from module import *ในระดับโมดูลมักจะเป็นความคิดที่ดี สำหรับสิ่งนี้สูญเสียคุณสมบัติที่สำคัญของ Python อย่างอื่นคุณสามารถทราบได้ว่าชื่อระดับบนสุดแต่ละชื่อถูกกำหนดโดยฟังก์ชัน "ค้นหา" อย่างง่ายในตัวแก้ไขรายการโปรดของคุณ นอกจากนี้คุณยังเปิดตัวเองให้มีปัญหาในอนาคตหากโมดูลบางอย่างเพิ่มฟังก์ชั่นหรือคลาสเพิ่มเติม


1
และถ้าฉันมี 1,000 ตัวแปรที่จะผ่าน?
Ofek

1
@Ofek เพียงแค่ใช้import file1 แล้ว
Ashwini Chaudhary

1
ไม่นำเข้าตัวแปร: \
Ofek

7
มันจะนำเข้าตัวแปรแม้ว่าคุณจะต้องผนวกรวมfile1.varXกับแต่ละไฟล์
zmo

43

ดีที่สุดที่จะนำเข้าx1และx2อย่างชัดเจน:

from file1 import x1, x2

นี้ช่วยให้คุณหลีกเลี่ยงความขัดแย้ง namespace ไม่จำเป็นกับตัวแปรและฟังก์ชั่นจากขณะที่ทำงานในfile1file2

แต่ถ้าคุณต้องการคุณสามารถนำเข้าตัวแปรทั้งหมด :

from file1 import * 

11

จริงๆแล้วสิ่งนี้ไม่เหมือนกับการนำเข้าตัวแปรด้วย:

from file1 import x1
print(x1)

และ

import file1
print(file1.x1)

Altough ที่ import time x1 และ file1.x1 มีค่าเท่ากัน แต่ไม่เหมือนกัน ตัวอย่างเช่นเรียกใช้ฟังก์ชันใน file1 ที่แก้ไข x1 แล้วลองพิมพ์ตัวแปรจากไฟล์หลัก: คุณจะไม่เห็นค่าที่แก้ไข


5

การตอบสนองของมาร์คถูกต้อง ที่จริงแล้วคุณสามารถพิมพ์ที่อยู่หน่วยความจำสำหรับตัวแปรprint(hex(id(libvar))และคุณสามารถดูที่อยู่ที่แตกต่างกัน

# 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เป็นที่ที่เราใช้ตัวแปร script1

วิธีที่ 1:

import script1
print(script1.title)

วิธีที่ 2:

from script1 import title
print(title)

1

ในPythonคุณสามารถเข้าถึงเนื้อหาของไฟล์อื่น ๆ เช่นราวกับว่าพวกเขา
เป็นห้องสมุดบางชนิดเมื่อเทียบกับภาษาอื่น ๆ เช่นจาวาหรือภาษาพื้นฐานใด ๆ Oop นี่มันเจ๋งจริงๆ

ทำให้การเข้าถึงเนื้อหาของไฟล์หรือนำเข้าเพื่อดำเนินการหรือทำอะไรกับมัน; และนั่นคือเหตุผลหลักว่าทำไมPythonภาษาจึงเป็นที่นิยมอย่างสูงสำหรับวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่องเป็นต้น

และนี่คือภาพของ project structure นี้

ฉันเข้าถึงตัวแปรจาก.env fileตำแหน่งที่API linksและปุ่มความลับอยู่ที่ไหน

โครงสร้างทั่วไป:

from <File-Name> import *

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.