programacion - Python: ¿cómo puedo importar todas las variables?
programacion modular en python (4)
Como otros han dicho,
from module import *
también importará las variables de los módulos.
Sin embargo, debe comprender que no está importando variables, solo referencias a objetos. Asignar algo más a los nombres importados en el módulo de importación no afectará a los otros módulos.
Ejemplo: supongamos que tiene un módulo module.py
contiene el siguiente código:
a= 1
b= 2
Luego tiene otros dos módulos, mod1.py
y mod2.py
que hacen lo siguiente:
from module import *
En cada módulo, se crean dos nombres, a
y b
, que apuntan a los objetos 1
y 2
, respectivamente.
Ahora, si en alguna parte de mod1.py
asigna algo más al nombre global a
:
a= 3
el nombre a
en module.py
y el nombre a
en mod2.py
aún señalarán el objeto 1
.
Por lo tanto, from module import *
funcionará si desea valores globales de solo lectura, pero no funcionará si desea valores globales de lectura / escritura. Si es este último, es mejor que solo import module
y luego obtenga el valor ( module.a
) o establezca el valor ( module.a= …
) prefijado por el módulo.
Soy nuevo en Python y la programación en general (un par de semanas como máximo).
En cuanto a Python y el uso de módulos, me doy cuenta de que las funciones se pueden importar utilizando from a import *
.
Entonces, en lugar de escribir
a.sayHi()
a.sayBye()
puedo decir
sayHi()
sayBye()
que encuentro simplifica mucho las cosas. Ahora, digamos que tengo un conjunto de variables que quiero usar en todos los módulos y las tengo todas definidas en un módulo de python. ¿Cómo puedo, usando un método similar al mencionado anteriormente o uno igualmente simple, importar estas variables? No quiero usar import a
y luego se me pedirá que marque todas mis variables con a.
.
La siguiente situación sería ideal:
a.py
name = "Michael"
age = 15
b.py
some_function
if name == "Michael":
if age == 15:
print("Simple!")
Salida:
Simple!
No dijiste esto directamente, pero asumo que tienes problemas con la manipulación de estas variables globales.
Si manipulas variables globales desde dentro de una función, debes declararlas globales
a = 10
def x():
global a
a = 15
print a
x()
print a
Si no haces eso, entonces a = 15
solo creará una variable local y le asignará 15, mientras que la global a se queda 10
Solo por algún contexto, la mayoría de los linters marcarán from module import *
con una advertencia, porque es propenso a colisiones de espacios de nombres que causarán dolores de cabeza en el futuro.
Nadie ha notado todavía que, como alternativa, puede usar el
from a import name, age
forma y luego usa name
y age
directamente (sin el prefijo a. El formulario from [module] import [identifiers]
es más a prueba de futuro porque puede ver fácilmente cuándo una importación prevalecerá sobre otra.
También tenga en cuenta que las "variables" no son diferentes de las funciones en Python en términos de cómo se abordan, cada identificador como name
o sayBye
apunta a algún tipo de objeto. El name
identificador está apuntando a un objeto de cadena, sayBye
está apuntando a un objeto de función, y la age
está apuntando a un objeto entero. Cuando le dices a Python:
from a import name, age
estás diciendo "toma esos objetos apuntados por name
y age
dentro del módulo a
y apúntalos en el alcance actual con los mismos identificadores".
Del mismo modo, si desea apuntarles con diferentes identificadores en la importación, puede usar
from a import sayBye as bidFarewell
formar. Se apunta al mismo objeto de función, excepto en el ámbito actual, el identificador que apunta hacia él es bidFarewell
mientras que en el módulo, el identificador que lo señala es sayBye
.
Usted mismo dio la solución: from a import *
funcionará bien. Python no diferencia entre funciones y variables a este respecto.
>>> from a import *
>>> if name == "Michael" and age == 15:
... print(''Simple!'')
...
Simple!