Імпорт змінних з іншого файлу?


134

Як я можу імпортувати змінні з одного файлу в інший?

приклад: чи file1є змінні x1та x2як їх передати file2?

Як я можу імпортувати всі змінні від однієї до іншої?

Відповіді:


146
from file1 import *  

імпортуватиме всі об'єкти та методи у файл1


54
Зауважте, однак, це взагалі те, чого ви не повинні робити .
Девід Кейн

7
Як зазначає Девід, це забруднює простір імен і може мати катастрофічні наслідки, маскуючи об’єкти та функції інших модулів, включаючи стандартні дистрибутивні
ennuikiller

11
Я намагався це зробити, але, схоже, python не може знайти файл1 , тому що я отримую цю помилку:ImportError: No module named file1
Hilder Vitor Ліма Перейра

4
У вас був __init__.pyфайл? Дивіться тут для більш детальної інформації
J0ANMM

76

Імпорт file1всередину file2:

Щоб імпортувати всі змінні з file1 без заповнення простору імен file2, використовуйте:

import file1

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

Щоб імпортувати всі змінні з файлу1 в область імен file2 (не рекомендується):

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

З документів :

Хоча правильне використання from module import *на рівні модулів, це зазвичай погана ідея. Для одного це втрачає важливе властивість, яке в іншому випадку має Python - ви можете знати, де ім'я кожного верхнього рівня визначається простою функцією "пошук" у вашому улюбленому редакторі. Ви також відкриєте себе для неприємностей у майбутньому, якщо якийсь модуль вирощує додаткові функції або класи.


1
і якщо мені доведеться пройти 1000 змінних?
Офек

1
@Ofek Просто використовуйте import file1 тоді.
Ashwini Chaudhary

1
Він не імпортує змінні: \
Ofek

7
він імпортує змінні, хоча вам доведеться зробити попередній запис file1.varXдля кожного файлу.
змо

43

Найкраще імпортувати x1 та x2 явно:

from file1 import x1, x2

Це дозволяє уникнути непотрібних конфліктів у просторі імен із змінними та функціями file1під час роботи file2.

Але якщо ви дійсно хочете, ви можете імпортувати всі змінні:

from file1 import * 

11

Насправді це не зовсім те саме, що імпортувати змінну з:

from file1 import x1
print(x1)

і

import file1
print(file1.x1)

Хоча час імпорту 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ви можете отримати доступ до вмісту інших файлів , таких як , начебто вони
є свого роду бібліотеки, по порівнянні з іншими мовами , як Java або будь-які OOP базових мов, це дійсно здорово;

Це робить доступ до вмісту файла або імпортувати його для обробки або робити з ним щось; І це головна причина, чому Pythonвкрай переважна мова для наукових даних та машинного навчання тощо;

І ось ця картина project structure Це

Де я отримую доступ до змінних, .env fileзвідки знаходяться API linksта секретні ключі.

Загальна структура:

from <File-Name> import *

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.