Такие вещи не допускаются практически на любом языке (я не могу сейчас думать об этом), в основном для предотвращения путаницы.
Ваш пример -d - отличный пример. Как компилятор знает, если вы имели в виду «переменную с именем -d» или «отрицательный номер в переменной d»? Поскольку он не может сказать (или, что еще хуже, может , чтобы вы не могли быть уверены, что произойдет, когда вы наберете это, не прочитав остальную часть файла), это не разрешено.
Пример 7g - это одно и то же. Вы можете указать числа как определенные базы или типы, добавив буквы в конец. Число 8357 является int в Java, где 8357L является длинным (поскольку на конце есть «L»). Если бы переменные могли начинаться с цифр, были бы случаи, когда вы не могли бы определить, должно ли оно быть именем переменной или просто литералом.
Я бы предположил, что остальные, перечисленные вами, имеют похожие причины , некоторые из которых могут быть историческими (т. е. C не мог сделать это по причине X , а Java спроектирована так, чтобы выглядеть как C, поэтому они сохранили правило).
На практике , они почти никогда не являются проблемой. Очень редко вы находите ситуацию, когда такие вещи раздражают. Тот, с которым вы столкнетесь больше всего, это переменные, начинающиеся с цифр, но вы всегда можете просто их прописать (т. Е. OneThing, twoThing, threeThing и т. Д.).
с использованием метода app.worker_main (v3.1.12):
± cat start_celery.py
#!/usr/bin/python
from myapp import app
if __name__ == "__main__":
argv = [
'worker',
'--loglevel=DEBUG',
]
app.worker_main(argv)