Je suis nouveau sur Python et la programmation en général (quelques semaines au plus).
Concernant Python et en utilisant des modules, je me rends compte que les fonctions peuvent être importées en utilisant from a import *
.
Donc au lieu de taper
a.sayHi()
a.sayBye()
Je peux dire
sayHi()
sayBye()
que je trouve simplifie beaucoup les choses. Maintenant, disons que j'ai un tas de variables que je veux utiliser entre les modules et je les ai tous définis dans un module python. Comment puis-je, en utilisant un similaire comme mentionné ci-dessus ou une méthode tout aussi simple, importez ces variables. Je ne veux pas utiliser import a
puis être obligé de préfixer toutes mes variables avec a.
.
La situation suivante serait idéalement:
a.py
name = "Michael"
age = 15
b.py
some_function
if name == "Michael":
if age == 15:
print("Simple!")
Production:
Simple!
Vous avez donné la solution vous-même: from a import *
fonctionnera très bien. Python ne fait pas de différence entre les fonctions et les variables à cet égard.
>>> from a import *
>>> if name == "Michael" and age == 15:
... print('Simple!')
...
Simple!
Juste pour un certain contexte, la plupart des linters marqueront from module import *
avec un avertissement, car il est sujet à des collisions d'espace de noms qui provoqueront des maux de tête sur la route.
Personne n'a encore noté que, comme alternative, vous pouvez utiliser le
from a import name, age
puis utilisez name
et age
directement (sans le a.
préfixe). Le from [module] import [identifiers]
le formulaire est plus à l'épreuve du temps car vous pouvez facilement voir quand une importation en remplacera une autre.
Notez également que les "variables" ne sont pas différentes des fonctions dans Python en termes de la façon dont elles sont adressées - chaque identifiant comme name
ou sayBye
est pointant sur une sorte d'objet. L'identifiant name
pointe sur un objet chaîne, sayBye
pointe sur un objet fonction et age
pointe sur un objet entier. vous dites à Python:
from a import name, age
vous dites "prenez ces objets pointés par name
et age
dans le module a
et pointez-les dans la portée actuelle avec les mêmes identificateurs".
De même, si vous souhaitez les pointer avec des identifiants différents lors de l'importation, vous pouvez utiliser le
from a import sayBye as bidFarewell
forme. Le même objet fonction est pointé, sauf dans la portée actuelle, l'identifiant pointant vers lui est bidFarewell
alors que dans le module a
l'identifiant pointant vers lui est sayBye
.
Comme d'autres l'ont dit,
from module import *
importera également les variables des modules.
Cependant, vous devez comprendre que vous n'importez pas des variables, juste des références à des objets. Attribuer autre chose aux noms importés dans le module d'importation ne sera pas affecte les autres modules.
Exemple: supposez que vous avez un module module.py
contenant le code suivant:
a= 1
b= 2
Ensuite, vous avez deux autres modules, mod1.py
et mod2.py
qui font les deux:
from module import *
Dans chaque module, deux noms, a
et b
sont créés, pointant vers les objets 1
et 2
, respectivement.
Maintenant, si quelque part dans mod1.py
vous attribuez autre chose au nom global a
:
a= 3
le nom a
dans module.py
et le nom a
dans mod2.py
pointera toujours sur l'objet 1
.
Donc from module import *
fonctionnera si vous voulez des globaux en lecture seule, mais cela ne fonctionnera pas si vous voulez des globaux en lecture-écriture. Dans ce dernier cas, il vaut mieux importer simplement import module
puis obtenir la valeur (module.a
) ou en définissant la valeur (module.a= …
) préfixé par le module.
Vous ne l'avez pas dit directement, mais je suppose que vous avez du mal à manipuler ces variables globales.
Si vous manipulez des variables globales à l'intérieur d'une fonction, vous devez les déclarer globales
a = 10
def x():
global a
a = 15
print a
x()
print a
Si vous ne le faites pas, alors a = 15
va simplement créer une variable locale et lui affecter 15, tandis que le global a reste 10