variable tipos texto numeros letras imprimir funciones entrada declarar datos convertir python variable-assignment variable-declaration

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

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()