Hallo ich meld mich mal wieder mit einem Problem
Also wir haben mal gelernt, dass man Funktionen importieren kann, indem man das Modul angibts und dann die FUnktionen, die man haben will also z.B.:
from random import random
oder so. Ich wollte fragen, ob es auch geht, dass man alle alle Funktionen eines Moduls importieren kann ohne die alle aufzuschreiben?
LG Lisa
Funktionen importieren
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ja, aber es wird nicht empfohlen, da man nie weiß, was man da alles importiert.
Code: Alles auswählen
from module import *
Bottle: Micro Web Framework + Development Blog
Lies die Dokumentation oder das Tutorial. Beachte dabei insbesondere diese Passage:
Although certain modules are designed to export only names that follow certain patterns when you use import *, it is still considered bad practise in production code.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Weil das noch nicht explizit gefallen ist:
Das ist, was man meist haben will.
Code: Alles auswählen
import module
module.func()
c = module.Class()
...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Dankeschön ich habe sie nun importiert.
Nun kommt allerdings das nächste Problem. Ich bin echt zu doof für alles
Wenn ich Funktionen importiere (also ich habe eine Datei mit Funktionen selbstgeschrieben und sie nun alle importiert), dann führt der die erste Funktion direkt aus. Also in der Funktion steht etwas mit Frog geschrieben (sowas ähnliches wie Turtle) und das macht der direkt und wenn ich es dann ausführen will, dann steht da immer dass eine globale Variable nicht vorhanden ist, obwohl sie im Hauptprogramm steht. Muss die dann noch woanders stehen?
Nun kommt allerdings das nächste Problem. Ich bin echt zu doof für alles
Wenn ich Funktionen importiere (also ich habe eine Datei mit Funktionen selbstgeschrieben und sie nun alle importiert), dann führt der die erste Funktion direkt aus. Also in der Funktion steht etwas mit Frog geschrieben (sowas ähnliches wie Turtle) und das macht der direkt und wenn ich es dann ausführen will, dann steht da immer dass eine globale Variable nicht vorhanden ist, obwohl sie im Hauptprogramm steht. Muss die dann noch woanders stehen?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Lass mich raten: Du hast Defnulls Hinweis ueberlesen und per * importiert?
Ansonsten solltest du uns mal mit Code fuettern.
Ansonsten solltest du uns mal mit Code fuettern.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hast du Code auf Modulebene, also nicht in Funktionen, der ausgeführt wird?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Hab das hier genommen
import module
Wenn man aber nur ein Modul importiert, kommt das gleiche.
so, das erste ist das hauptprogramm, das Zweite sind die Städte und das Dritte ist das Intro.
Habe nun gerade dazu festgestellt, dass der das ganze auf nem anderen PC nicht abspielt dannkommt dann invalid syntax zwischen dem = und dem F bei
Lg Lisa
Edit:
import module
Wenn man aber nur ein Modul importiert, kommt das gleiche.
import staedte, pykemon
from intro import intro
spielwelt = Pool(height = 768, width = 1024, bgimage = "gamegirl.gif")
spielwelt.froschliste = []
intro()
spielwelt.kirschblüt = Frog(spielwelt, visible = False)
def kaytown():
def markt(event):
for frosch in spielwelt.froschliste:
frosch.exit()
spielwelt.froschliste = []
spielwelt.bgimage = "marktbild.gif"
[...]
for frosch in spielwelt.froschliste:
frosch.exit()
spielwelt.froschliste = []
spielwelt.bgimage = "kaytown.gif"
spielwelt.eigeneshaus = Frog(spielwelt, visible = False)
spielwelt.froschliste.append(spielwelt.eigeneshaus)
So ist etwas mehr sorryfrom frog import Frog, Pool
def intro():
"""Lässt das Intro abspielen"""
spielwelt.bgimage = "gamegirl.gif"
waiter = Frog(spielwelt, visible = False)
so, das erste ist das hauptprogramm, das Zweite sind die Städte und das Dritte ist das Intro.
Habe nun gerade dazu festgestellt, dass der das ganze auf nem anderen PC nicht abspielt dannkommt dann invalid syntax zwischen dem = und dem F bei
bei dem untersten. Da ich nun eindeutig zu viel Schreibe stopp ich hier mal.spielwelt = Pool(height = 768, width = 1024, bgimage = "gamegirl.gif")
spielwelt.froschliste = []
spielwelt.kirschblüt = Frog(spielwelt, visible = False)
Lg Lisa
Edit:
Ehhhr was heißt dasHast du Code auf Modulebene, also nicht in Funktionen, der ausgeführt wird?
Es wäre gut wenn du anstatt
[/code] verwenden würdest, so sieht man nichts von der Einrückung
Code: Alles auswählen
[quote][/quote]
Code: Alles auswählen
[code=py]
the more they change the more they stay the same
@Lisa:
Ein `from modul import func` führt auch dazu, dass `def` ausgegben wird, da `print 'def'` auf Modulebene steht.
Code: Alles auswählen
#modul.py
def func():
print 'abc'
print 'def'
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Oh ja, habs verstanden
Habe Code auf Modulebene, ist das Schlimm?
Habe Code auf Modulebene, ist das Schlimm?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ja.Midna hat geschrieben:Habe Code auf Modulebene, ist das Schlimm?
Sofern die Module nur importiert werden, hat nichts ausser Konstanten und Definitionen (und evtl einem ifmain) auf Modulebene zu suchen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hmm okay, werds nun mal löschen, mal sehen was mich dann beschert
Edit:
Oke, habe nun alles auf Moduleben aus den Programmen gelöscht und Tadaaa es hat funktioniert, die Programme führen sich nicht mehr selbst aus. Leider kann aber das intro, wenn ich es hinschreibe, immernoch nicht ausgeführt werden, da spielwelt nicht bekannt ist. spielwelt ist jedoch ein im Hauptprogramm bekanntes Objekt.
Edit:
Oke, habe nun alles auf Moduleben aus den Programmen gelöscht und Tadaaa es hat funktioniert, die Programme führen sich nicht mehr selbst aus. Leider kann aber das intro, wenn ich es hinschreibe, immernoch nicht ausgeführt werden, da spielwelt nicht bekannt ist. spielwelt ist jedoch ein im Hauptprogramm bekanntes Objekt.
Wenn "spielwelt" nicht im Modul bekannt ist, indem "intro" definiert ist, funktioniert das nicht. Auch wenn du "intro" im Hauptprogramm ausführst.
Dieses Problem löst man entweder durch Funktionsparameter + Rückgabewerte oder durch ein sauber strukturiertes OO-Design, bei dem alle Abhängigkeiten abgedeckt sind.
Dieses Problem löst man entweder durch Funktionsparameter + Rückgabewerte oder durch ein sauber strukturiertes OO-Design, bei dem alle Abhängigkeiten abgedeckt sind.
Was ein OO-Design ist, weiß ich schonmal nicht, also bleibt es wohl bei den Rückgabewerten. Was muss den übergeben werden und was zurückgegeben oô
Danke erstmal für die ganze Hilfe, das ist echt super
Danke erstmal für die ganze Hilfe, das ist echt super
OO - ObjektOrientierung
Design - Entwurf
Ganz knapp bedeutet es den Entwurf deiner Klassen (mit Attributen und Methoden) und wie diese miteinander in Beziehung stehen.
Und das mit Parametern und Rückgabewerten ist doch eigentlich offensichtlich. Wenn du "spielwelt" in der Funktion "intro" benötigst, musst du das als Parameter an "intro" übergeben. Wenn "spielwelt" am Ende der Funktion auf ein anderes Objekt zeigt, musst du dieses von "intro" zurückgeben und im Hauptprogramm neu zuweisen.
Sinnfreies Minimal-Beispiel:
Edit: Kommentare ergänzt.
Design - Entwurf
Ganz knapp bedeutet es den Entwurf deiner Klassen (mit Attributen und Methoden) und wie diese miteinander in Beziehung stehen.
Und das mit Parametern und Rückgabewerten ist doch eigentlich offensichtlich. Wenn du "spielwelt" in der Funktion "intro" benötigst, musst du das als Parameter an "intro" übergeben. Wenn "spielwelt" am Ende der Funktion auf ein anderes Objekt zeigt, musst du dieses von "intro" zurückgeben und im Hauptprogramm neu zuweisen.
Sinnfreies Minimal-Beispiel:
Code: Alles auswählen
class Spielwelt(object):
def __init__(self, var):
self.var = var
def func1(sp_welt):
sp_welt.var = 1
# kein return nötig
def func2(sp_welt):
sp_welt = Spielwelt(3)
# sp_welt zeigt auf neues Object, return nötig
return sp_welt
def main():
sp_welt = Spielwelt(2)
# sp_valt.var ist jetzt 2
func1(sp_welt)
# sp_valt.var ist jetzt 1
sp_welt = func2(sp_welt)
# sp_valt.var ist jetzt 3
Dankeschön für die Mühe, ahbs aber nun anders. ich hab intro nun einfach ins Hauptprogramm geschrieben, also nicht in ein eigenes Modul. Nun ist der QT zwar nicht mehr so toll, aber es funktioniert
Das ist eine sehr schlechte Einstellung "Hauptsache es funktioniert, egal wie". Wenn du selber sogar schon merkst, dass dein Code nicht unbedingt gut ist, ohne dass dich andere darauf aufmerksam machen, solltest du dir einmal Gedanken machen, ob das wirklich der richtige Weg ist, den du mit dieser Argumentation eingeschlagen hast...Midna hat geschrieben:Dankeschön für die Mühe, ahbs aber nun anders. ich hab intro nun einfach ins Hauptprogramm geschrieben, also nicht in ein eigenes Modul. Nun ist der QT zwar nicht mehr so toll, aber es funktioniert
Das kann schon sein, aber wir müssen das sehr bald abgeben und wir haben noch recht viel zu tun und da bleibt nicht so viel zeit um uns damit rumzuschlagen