tipos - int input python
¿Es posible declarar una variable sin asignar ningún valor en Python? (13)
¿Por qué no hacer esto?
var = None
Python es dinámico, por lo que no es necesario declarar cosas; existen automáticamente en el primer ámbito donde se asignan. Por lo tanto, todo lo que necesita es una declaración de asignación antigua regular como la anterior.
Esto es bueno, porque nunca terminarás con una variable sin inicializar. Pero tenga cuidado, esto no significa que no terminará con las variables inicializadas incorrectamente . Si inicia algo en None
, asegúrese de que eso es lo que realmente quiere y asigne algo más significativo si puede.
¿Es posible declarar una variable en Python, así ?:
var
para que se inicialice a ninguno? Parece que Python lo permite, pero tan pronto como accedes a él, se bloquea. es posible? Si no, ¿por qué?
EDITAR: Quiero hacer esto para casos como este:
value
for index in sequence:
if value == None and conditionMet:
value = index
break
Duplicar
- Valor no inicializado en python (por el mismo autor)
- ¿Hay palabras clave de declaración en Python? (por el mismo autor)
Relacionado
Bueno, si desea verificar si una variable está definida o no, ¿por qué no verificar si está en los arreglos locals () o globals ()? Su código reescrito
for index in sequence:
if ''value'' not in globals() and conditionMet:
value = index
break
Si está buscando una variable local, reemplace globals () con locals ().
En Python 3.6+ puedes usar Anotaciones de Variable para esto:
https://www.python.org/dev/peps/pep-0526/#abstract
PEP 484 introdujo sugerencias de tipo, también conocidas como anotaciones de tipo. Si bien su enfoque principal eran las anotaciones de funciones, también introdujo la noción de comentarios de tipo para anotar variables:
# ''captain'' is a string (Note: initial value is a problem)
captain = ... # type: str
PEP 526 tiene como objetivo agregar sintaxis a Python para anotar los tipos de variables (incluidas las variables de clase y las variables de instancia), en lugar de expresarlas mediante comentarios:
captain: str # Note: no initial value!
Parece estar más directamente en línea con lo que estaba preguntando "¿Es posible declarar una variable sin asignar ningún valor en Python?"
En primer lugar, mi respuesta a la pregunta que originalmente me hizo.
P: ¿Cómo descubro si una variable está definida en un punto de mi código?
R: Lea en el archivo de origen hasta que vea una línea donde se define esa variable.
Pero además, has dado un ejemplo de código de que hay varias permutaciones que son bastante pitónicas. Está buscando una manera de escanear una secuencia en busca de elementos que coincidan con una condición, así que aquí hay algunas soluciones:
def findFirstMatch(sequence):
for value in sequence:
if matchCondition(value):
return value
raise LookupError("Could not find match in sequence")
Claramente, en este ejemplo, podría reemplazar el raise
con un return None
dependiendo de lo que deseaba lograr.
Si quisiera todo lo que coincidiera con la condición, podría hacer esto:
def findAllMatches(sequence):
matches = []
for value in sequence:
if matchCondition(value):
matches.append(value)
return matches
Hay otra forma de hacerlo con yield
que no me molestaré en mostrarte, porque es bastante complicado en la forma en que funciona.
Además, hay una forma de una línea para lograr esto:
all_matches = [value for value in sequence if matchCondition(value)]
Es una buena pregunta y, desafortunadamente, es una mala respuesta ya que var = None
ya asigna un valor, y si su script se ejecuta varias veces, se sobrescribe con None
cada vez.
No es lo mismo que definir sin asignación. Todavía estoy tratando de averiguar cómo evitar este problema.
Le recomiendo de todo corazón que lea Otros idiomas tienen "variables" (lo agregué como un enlace relacionado): en dos minutos sabrá que Python tiene "nombres", no "variables".
val = None
# ...
if val is None:
val = any_object
No estoy seguro de lo que estás tratando de hacer. Python es un lenguaje muy dinámico; por lo general, no es necesario declarar las variables hasta que realmente las asigne o utilice. Creo que lo que quieres hacer es solo
foo = None
el cual asignará el valor None
a la variable foo
.
EDITAR: Lo que realmente parece querer hacer es simplemente esto:
#note how I don''t do *anything* with value here
#we can just start using it right inside the loop
for index in sequence:
if conditionMet:
value = index
break
try:
doSomething(value)
except NameError:
print "Didn''t find anything"
Es un poco difícil saber si ese es realmente el estilo correcto para usar en un ejemplo de código tan corto, pero es una forma más "pitónica" de trabajar.
EDITAR: abajo está el comentario de JFS (publicado aquí para mostrar el código)
Sin relación con la pregunta del OP, pero el código anterior puede reescribirse como:
for item in sequence:
if some_condition(item):
found = True
break
else: # no break or len(sequence) == 0
found = False
if found:
do_something(item)
NOTA: si some_condition()
genera una excepción, entonces se found
está sin some_condition()
.
NOTA: si len (secuencia) == 0, el item
no está consolidado.
El código anterior no es recomendable. Su propósito es ilustrar cómo funcionan las variables locales, es decir, si "variable" está "definida" podría determinarse solo en tiempo de ejecución en este caso. Manera preferible:
for item in sequence:
if some_condition(item):
do_something(item)
break
O
found = False
for item in sequence:
if some_condition(item):
found = True
break
if found:
do_something(item)
Parece que estás intentando escribir C en Python. Si quieres encontrar algo en una secuencia, Python tiene funciones incorporadas para hacer eso, como
value = sequence.index(blarg)
Por lo general, inicializo la variable a algo que denota el tipo como
var = ""
o
var = 0
Si va a ser un objeto, no lo inicialice hasta que lo ejemplifique:
var = Var()
Puede engañar a un intérprete con este feo oneliner if None: var = None
No hace nada más que agregar una variable var
al diccionario de variables locales, no inicializarlo. El intérprete lanzará la excepción UnboundLocalError si intenta usar esta variable en una función posteriormente. Esto también funcionaría para versiones muy antiguas de python. No es simple, ni hermoso, pero no esperes mucho de python.
Si None
es un valor de datos válido, entonces necesita la variable de otra manera. Podrías usar:
var = object()
Este centinela es sugerido por Nick Coghlan .
Si entiendo bien tu ejemplo, no necesitas referirte a ''valor'' en la declaración if de todos modos. Estás saliendo del bucle tan pronto como se puede configurar para cualquier cosa.
value = None
for index in sequence:
doSomethingHere
if conditionMet:
value = index
break
var_str = str()
var_int = int()