Импортировать переменные из другого файла?

136

Как я могу импортировать переменные из одного файла в другой?

пример: file1есть переменные x1и x2как их передать file2?

Как я могу импортировать все переменные из одной в другую?

Офек
источник

Ответы:

147
from file1 import *  

импортирует все объекты и методы в файл1

ennuikiller
источник
55
Однако учтите, что обычно этого делать не следует .
David Cain
7
Как отмечает Дэвид, это загрязняет пространство имен и может иметь катастрофические последствия из-за маскировки объектов и функций из других модулей, в том числе из стандартного дистрибутива
ennuikiller
11
Я пытался сделать это, но похоже, что python не может найти файл1 , потому что я получаю эту ошибку:ImportError: No module named file1
Хильдер Витор Лима Перейра
4
У вас был __init__.pyфайл? Подробнее см. Здесь .
J0ANMM
77

Импортировать file1внутрь file2:

Чтобы импортировать все переменные из file1 без переполнения пространства имен 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
а если мне нужно передать 1000 переменных?
Ofek
1
@Ofek Тогда используй import file1 .
Ашвини Чаудхари
1
Он не импортирует переменные: \
Офек,
7
он импортирует переменные, хотя вам придется добавлять их file1.varXдля каждого файла.
zmo
44

Лучше всего явно импортировать 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 имеют одинаковое значение, они не являются одинаковыми переменными. Например, вызовите функцию в файле1, которая изменяет 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)))
Lei Z
источник
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 *
Имран
источник
0

first.py:

a=5

second.py:

import first
print(first.a)

Результат будет 5.

陳仲 肯
источник