Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5399

Re: [Python-de] import Problem

From Peter Otten <__peter__@web.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] import Problem
Date 2019-01-11 15:33 +0100
Organization None
Message-ID <mailman.195.1547217215.4816.python-de@python.org> (permalink)
References <g9r8r8Ffq9nU1@mid.individual.net> <171918211.9ehmPdll05@palindrom>

Show all headers | View raw


Hermann Riemann wrote:

> Gegeben große Datei mit
> 
> z=6
> 
> def a():
>     global z
>     # viel code
>     print("in a")
>     z-=1
>     if z>0: b()
>     # viel code
> 
> def b():
>     global z
>     # viel code
>     print("in b")
>     a()
>     # viel code
> 
> Die soll zerlegt werden in
> ma.py:
> 
> z=6
> 
> def a():
>     global z
>     # viel code
>     print("in a")
>     z-=1
>     if z>0: b()
>     # viel code
> 
> mb.py:
> 
> def b():
>     global z
>     # viel code
>     print("in b")
>     a()
>     # viel code
> 
> Der Aufruf von
> 
> from ma import *
> from mb import *

*-Imports sind meist keine gute Idee. Hier sehe ich zwei Probleme:

- a referenziert b und b referenziert a, es gibt also einen reference-cycle.
  Da eines der beiden Module beim Import noch nicht initialisiert ist, wird
  die entsprechende Funktion nicht in den Namespace des anderen kopiert.

- Beide Module enthalten unabhängig voneinander den Namen z. Nach der ersten
  Zuweisung enthalten die Variablen also verschieden Werte.

Mit normalen Imports kannst du dich für ein Modul entscheiden; wenn

z = ...

in ma definiert ist, kannst du von mb lesend und schreibend mit dem 
qualifizierten Namen darauf zugreifen:

print(ma.z)
ma.z += 42

Auch mb.b und mb.a sind beide zum Zeitpunkt des ersten Zugriffs definiert.

Unabhängig von konkreten Problemen würde ich mir den Code noch einmal 
daraufhin ansehen, ob er sich so umformulieren lässt, dass der reference-
cycle vermieden wird.

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

import Problem Hermann Riemann <nospam.ng@hermann-riemann.de> - 2019-01-11 11:18 +0100
  Re: [Python-de] import Problem Achim Herwig <python@wodca.de> - 2019-01-11 11:28 +0100
    Re: [Python-de] import Problem Hermann Riemann <nospam.ng@hermann-riemann.de> - 2019-01-11 15:42 +0100
  Re: [Python-de] import Problem Peter Otten <__peter__@web.de> - 2019-01-11 15:33 +0100
    Re: [Python-de] import Problem Hermann Riemann <nospam.ng@hermann-riemann.de> - 2019-01-11 17:09 +0100

csiph-web