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


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

Re: [Python-de] import Problem

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Peter Otten <__peter__@web.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] import Problem
Date Fri, 11 Jan 2019 15:33:09 +0100
Organization None
Lines 80
Message-ID <mailman.195.1547217215.4816.python-de@python.org> (permalink)
References <g9r8r8Ffq9nU1@mid.individual.net> <171918211.9ehmPdll05@palindrom>
Mime-Version 1.0
Content-Type text/plain; charset="iso-8859-1"
Content-Transfer-Encoding quoted-printable
X-Trace news.uni-berlin.de c7drklkEChABmUgXxxBC8wo6Ck5pALXtl7c1tncoRVPQ==
Return-Path <__peter__@web.de>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1547217214; bh=wmvgYeoCzkXZa7VhsfaAIsyh42SJf1TVaVMh7w1sLRo=; h=X-UI-Sender-Class:From:To:Subject:Date:In-Reply-To:References; b=Pi0ZdpXC/1o5DBB6fsY/SMiCluX/aXzMTE//6Q7oHEq9BS+Rl95GhRosKSyurEGGa vvu5YGfhFjmrJbjFZNdYadS0FMocnSBhTG4kpSpjHJgP5vkJQA5Ahr4Z8Jknrr9yV0 JMhWPN/1/2oznNJcpZBqJ2xlV2OhxpWTIiE2H1g0=
X-UI-Sender-Class c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9
User-Agent KMail/4.13.3 (Linux/3.13.0-147-generic; KDE/4.13.3; x86_64; ; )
In-Reply-To <g9r8r8Ffq9nU1@mid.individual.net>
X-Provags-ID V03:K1:zZvJr3Pua3FXnUMTrAbXVB4J9e2ToTFDNDlxAFFOe/Ebw7zMO5p WnQEyKm+GA578seaPLoAI5ZYNALsUsbOQMjrJnzR5DHfZVuvq43T0x0hpNOXrNC787BiKQz NTfGb8AjT1dRc/Xib2L+499QKONOsUmjtBa4FejBcdsa3u12fEiM6sNJRJtWwhpJSFjnu8j Lx6SizSzfNdoIc/ek4zqw==
X-Spam-Flag NO
X-UI-Out-Filterresults notjunk:1;V03:K0:DWlEMpPmlL0=:qwmmJsP+WXGBJrQNegkEXu WVdnEJHsQeOoKbVOR4oQO4puaA3a+YKq3FWW6Z9RCSgi69zYci8FzOsEzAqpK9LH70w6tIJx8 vmATdsJEyjoCTagz3F9j1CbVfCXm3r13hhKohneppP9vxGOa27kazY9QbYYEc0KYNN5hqnR6t yrWZea6xUH850owd3OToRA7T0h2K55Ngs+2zhGbtU1QWCwZRQ32r04Rg4TTUSQATCoKx5ajRX LaLnH0h/o+KyHkm/HMz6uTE0ws9C/y1IbTA9xkRygx5pnP12PmEGZyoW7TjfbSpLGZ/1AZ/8O /uhOUVJ8tFgFXgv6iTVlaxqPAtHnOz385/9tM7u/QdtFCEPdrVcrbQu6scBQRrdL5J2YiA5m+ +b9SpJzsjH9pjlmA4VuZ/S4W9zOqB8iAFRXNn3lTIFPt0KDv1naw6iB1yT7yy1H69h6sYyUq0 tpxuXi9G2yP7Ej7Py8+36J28P9TkdnLRHJLb/BUc+kCIg71TSwQ7dgFtNDXfMPr88fsZ0833Q EwCyFLLY/idaZCGc4+tRamWj2Ys5E3KHD+L7WNpA8Xs0LvE1tWme0cCCrUprYKOcrEnsxZyvh EEC5k4Ed6k+WwN8JqT+ddYg+ey8zybmogtHl4Gi4BxUW5zXe5O6ReRANB+EWM1TAH0A04A+Gb ciXmG9D/F9/cI1PLwX4KGS4TBeatxl9qEAqIk7G0WZDKqnP76aQEOjrCl2l2/SQrB0OCN8kHP zPw3JbCt+1oGqKep/Vw/nlnocWYOn3DNW1G0jE6exhKXGuiEXY8xXZHRmzaIhxLvaTNM0BXOy 4JGNEqnBHD5XZutDzSbhoFiLHMt+GKF8xER40Q9SgtYvtLKdCKpuwmQjixAxMNwrbd4GSYmkp zysDULYvyWb6K6r7IEGNycyzE9xqWxV2q/TbtN7EvunYVBrLhlfiw1nzF62/mi
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.29
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-de/>
List-Post <mailto:python-de@python.org>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <171918211.9ehmPdll05@palindrom>
X-Mailman-Original-References <g9r8r8Ffq9nU1@mid.individual.net>
Xref csiph.com de.comp.lang.python:5399

Show key headers only | 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