Это не то, как вы делаете что-то на 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, вы можете «объявить» переменные в файле байт-кода. Но не делай этого! Таким образом, безумие!
Взгляните на документацию по пакетам (раздел 6.4) здесь: http://docs.python.org/tutorial/modules.html
Короче говоря, вам необходимо поместите пустой файл с именем
__init__.py
в каталог «lib».
Содержит ли ваш каталог lib файл __ init __. Py
?
Python использует __ init __. Py
, чтобы определить, является ли каталог модулем.
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!
Попробуйте импортировать .lib.BoxTime
. Дополнительные сведения об относительном импорте см. В PEP 328 .