Ich versuche, verschiedene Funktionen in meinem Programm zu trennen, um die Dinge ordentlich zu halten. Und ich bleibe stecken und versuche, Variablen zu verwenden, die in einem Modul in einem anderen Modul erstellt wurden. Ich habe versucht, global list_of_names
zu verwenden, aber es hat nicht funktioniert, und ich habe gelesen, dass es empfehlenswert ist, dies sowieso nicht zu tun.Die beste Methode, Variablen in Modulen zu verwenden? (Python3)
Unten ist ein Beispiel meines Codes. Meiner Meinung nach ist es nicht sinnvoll, list_of_names
als Funktionsargument zu übergeben, da es neben den eigentlichen Argumenten, die übergeben werden, mehrere andere Variablen gibt, mit denen ich dies tun muss.
Leider, auch wenn ich read_json
in engine.py verschieben würde, hätte ich immer noch das gleiche Problem in main.py, da ich auch dort auf list_of_names
verweisen muss.
# main.py:
import json
from engine import create_person
def read_json():
with open('names.json', 'r') as file
data = json.load(file)
return data
list_of_names = read_json()
person1 = create_person()
# engine.py:
from random import choice
def create_person():
name = choice(list_of_names)
new_person = {
'name': name,
# other keys/values created in similar fashion
}
return new_person
EDIT1: Hier ist mein neuer Code. Für mich scheint dies nicht effizient zu sein, die Parameterliste zu erstellen und sie dann innerhalb der Funktion zu dekonstruieren. (Ich weiß, dass ich Variablennamen für dieses Beispiel wiederverwende). Dann muss ich einige dieser Parameter an andere Funktionen übergeben.
# main.py:
import json
from engine import create_person
def read_json():
with open('names.json', 'r') as file
data = json.load(file)
return data
player_id_index = 0
list_of_names = read_json()
person_parameters = [
list_of_names,
dict_of_locations,
player_id_index,
dict_of_occupations,
.
.
.
]
person1, player_id_index = create_person()
# engine.py:
from random import choice
def create_person(person_params):
list_of_names = person_params[0]
dict_of_locations = person_params[1]
player_id_index = person_params[2]
dict_of_occupations = person_params[3]
.
.
.
attr = person_params[n]
name = choice(list_of_names)
location = get_location(dict_of_locations) # a function elsewhere in engine.py
p_id = player_id_index
occupation = get_occupation(dict_of_occupations) # a function elsewhere in engine.py
new_person = {
'name': name,
'hometown': location,
'player id': p_id,
'occupation': occupation,
.
.
.
}
player_id_index += 1
return new_person, player_id_index
gestellt. Versuchen Sie nicht, dieselbe Variable für mehrere Module zu verwenden. Sie sollten nicht einmal versuchen, die gleiche Variable über mehrere Funktionen hinweg zu verwenden. Erfahren Sie mehr über Funktionsargumente und Rückgabewerte, die fast immer die richtige Methode sind, um Daten zwischen Funktionen zu übergeben. – user2357112
Zusammengefasst mit dem oben genannten, wie wäre es mit einigen OOP (Object Oriented Programming) Struktur in Ihrem Code? Dadurch wird Ihr Code leichter lesbar, wartungsfreundlicher und wiederverwendbar. – 0xDEFACED
@StevenRumbalski @ user2357112 Meinst du etwas wie 'create_person (mylist)'? Denn wie gesagt, es ist nicht praktisch, da ich auf diese Weise viele Argumente an die Funktion übergeben müsste. – drewd423