Можно ли объявить переменную в Python, например?
var
так что оно инициализировано в None? Кажется, что Python позволяет это, но как только вы получаете к нему доступ, он падает. Это возможно? Если нет, то почему?
РЕДАКТИРОВАТЬ: Я хочу сделать это для таких случаев, как это:
value
for index in sequence:
if value == None and conditionMet:
value = index
break
Дублированный
- Неинициализированное значение в python (того же автора)
- Есть ли какие-либо ключевые слова объявления в Python? (того же автора)
Связанный
python
variable-assignment
variable-declaration
Джоан Венге
источник
источник
Ответы:
Почему бы просто не сделать это:
Python динамический, поэтому вам не нужно объявлять что-либо; они существуют автоматически в первой области, где они назначены. Итак, все, что вам нужно, это обычный старый оператор присваивания, как указано выше.
Это хорошо, потому что у вас никогда не будет неинициализированной переменной. Но будьте осторожны - это не значит, что вы не будете в конечном итоге неправильно инициализированные переменные. Если вы
None
начинаете что- то делать, убедитесь, что вы действительно этого хотите, и назначьте что-то более значимое, если можете.источник
От всей души рекомендую вам прочитать. В других языках есть «переменные» (я добавил их в виде ссылки) - через две минуты вы поймете, что в Python есть «имена», а не «переменные».
источник
val = val or any_object
чтобы инициализировать его.is
чтобы проверить, является ли значениеNone
.В Python 3.6+ вы можете использовать аннотации переменных для этого:
https://www.python.org/dev/peps/pep-0526/#abstract
В PEP 484 введены подсказки типа, или аннотации типа. Хотя основное внимание было уделено аннотациям функций, оно также вводило понятие комментариев к комментариям для переменных:
PEP 526 направлен на добавление синтаксиса в Python для аннотирования типов переменных (включая переменные класса и переменные экземпляра) вместо выражения их через комментарии:
Кажется, это более точно соответствует тому, что вы спрашивали: «Можно ли только объявить переменную без присвоения какого-либо значения в Python?»
источник
Я не уверен, что ты пытаешься сделать. Python - очень динамичный язык; вам обычно не нужно объявлять переменные, пока вы на самом деле не собираетесь назначать или использовать их. Я думаю, что вы хотите сделать, это просто
который назначит значение
None
переменнойfoo
.РЕДАКТИРОВАТЬ: То, что вы действительно хотите сделать, это просто:
Это немного трудно сказать , если это действительно правильный стиль для использования с такой короткий пример кода, но это более «Pythonic» способ работы.
РЕДАКТИРОВАТЬ: ниже комментарий JFS (размещен здесь, чтобы показать код)
Не имеет отношения к вопросу ОП, но приведенный выше код можно переписать так:
ПРИМЕЧАНИЕ: если
some_condition()
возникает исключение, тоfound
это не связано.ПРИМЕЧАНИЕ: если len (sequence) == 0,
item
это не связано.Приведенный выше код не рекомендуется. Его цель - проиллюстрировать, как работают локальные переменные, а именно, может ли «переменная» «определяться», может быть определена только во время выполнения в этом случае. Предпочтительный способ:
Или
источник
Я обычно инициализирую переменную к чему-то, что обозначает тип как
или
Если это будет объект, не инициализируйте его, пока не создадите его экземпляр:
источник
Что ж, если вы хотите проверить, определена ли переменная или нет, то почему бы не проверить, находится ли она в массивах locals () или globals ()? Ваш код переписан:
Если вы ищете локальную переменную, замените globals () на locals ().
источник
Прежде всего, мой ответ на вопрос, который вы изначально задали
Q: Как я могу определить, определена ли переменная в точке моего кода?
A: Читайте в исходном файле, пока не увидите строку, где определена эта переменная.
Но, кроме того, вы привели пример кода, в котором есть различные варианты, которые достаточно питонны. Вы ищите способ просканировать последовательность на наличие элементов, соответствующих условию, поэтому вот несколько решений:
Ясно , что в этом примере вы могли бы заменить
raise
сreturn None
зависимости от того, чего вы хотите достичь.Если вы хотите все, что соответствует условию, вы можете сделать это:
Есть другой способ сделать это
yield
, и я не буду показывать вам, потому что он довольно сложен в работе.Кроме того, есть один способ добиться этого:
источник
Если я правильно понимаю ваш пример, вам все равно не нужно ссылаться на 'value' в операторе if. Вы выходите из цикла, как только он может быть установлен на что-либо.
источник
Похоже, вы пытаетесь написать C на Python. Если вы хотите найти что-то в последовательности, Python имеет встроенные функции для этого, например,
источник
Это хороший вопрос и, к сожалению, плохие ответы, так как
var = None
он уже присваивает значение, и если ваш скрипт выполняется несколько раз, онNone
каждый раз перезаписывается .Это не то же самое, что определение без присваивания. Я все еще пытаюсь понять, как обойти эту проблему.
источник
Можно ли объявить переменную в Python (var = None):
источник
источник
Если
None
допустимое значение данных, то вам нужно изменить переменную другим способом. Вы можете использовать:Этот страж предлагается Ником Когланом .
источник
Вы можете обмануть интерпретатора этим уродливым oneliner.
if None: var = None
Он ничего не делает, кроме добавления переменнойvar
в словарь локальных переменных, а не ее инициализации. Интерпретатор сгенерирует исключение UnboundLocalError, если вы попытаетесь впоследствии использовать эту переменную в функции. Это будет работать и для очень древних версий Python. Не простой и не красивый, но не ожидайте многого от питона.источник