Импортировать файл из подкаталога?

Это не то, как вы делаете что-то на Java. В Java нет динамических переменных. Переменные Java должны быть объявлены в исходном коде (*). Период.

В зависимости от того, чего вы пытаетесь достичь, вы должны использовать массив, List или Map; например,

int n[] = new int[3];
for (int i = 0; i < 3; i++) {
    n[i] = 5;
}

List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
    n.add(5);
}

Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
    n.put("n" + i, 5);
}

Можно использовать динамическое отражение для обозначения переменных , которые были объявлены в исходном коде. Однако это работает только для переменных, являющихся членами класса (т. Е. Статических полей и полей экземпляра). Он не работает для локальных переменных. См. Пример «быстрый и грязный» @ fyr.

Однако делать это без необходимости в Java - это плохая идея. Это неэффективно, код более сложный, и поскольку вы полагаетесь на проверку времени выполнения, он более хрупкий.

И это не «переменные с динамическими именами». Он лучше описывает динамический доступ к переменным со статическими именами.


* - Это утверждение немного неточно. Если вы используете BCEL или ASM, вы можете «объявить» переменные в файле байт-кода. Но не делай этого! Таким образом, безумие!

401
задан martineau 10 May 2017 в 17:18
поделиться

4 ответа

Взгляните на документацию по пакетам (раздел 6.4) здесь: http://docs.python.org/tutorial/modules.html

Короче говоря, вам необходимо поместите пустой файл с именем

__init__.py

в каталог «lib».

497
ответ дан 22 November 2019 в 23:28
поделиться

Содержит ли ваш каталог lib файл __ init __. Py ?

Python использует __ init __. Py , чтобы определить, является ли каталог модулем.

19
ответ дан 22 November 2019 в 23:28
поделиться
  • Создайте подкаталог с именем lib .
  • Создайте пустой файл с именем lib \ __ init __. Py .
  • В lib \ BoxTime.py , напишите функцию foo () следующим образом:

     def foo ():
     напечатайте "foo!"
    
  • В вашем клиентском коде в каталоге выше lib напишите:

     from lib import BoxTime
    BoxTime.foo ()
    
  • Запустите свой клиентский код. Вы получите:

     foo!
    

Намного позже - в Linux это будет выглядеть так:

% cd ~/tmp
% mkdir lib
% touch lib/__init__.py
% cat > lib/BoxTime.py << EOF
heredoc> def foo():
heredoc>     print "foo!"
heredoc> EOF
% tree lib
lib
├── BoxTime.py
└── __init__.py

0 directories, 2 files
% python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lib import BoxTime
>>> BoxTime.foo()
foo!
151
ответ дан 22 November 2019 в 23:28
поделиться

Попробуйте импортировать .lib.BoxTime . Дополнительные сведения об относительном импорте см. В PEP 328 .

15
ответ дан 22 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: