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: References: <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: 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <171918211.9ehmPdll05@palindrom> X-Mailman-Original-References: Xref: csiph.com de.comp.lang.python:5399 Hermann Riemann wrote: > Gegeben gro=DFe Datei mit >=20 > z=3D6 >=20 > def a(): > global z > # viel code > print("in a") > z-=3D1 > if z>0: b() > # viel code >=20 > def b(): > global z > # viel code > print("in b") > a() > # viel code >=20 > Die soll zerlegt werden in > ma.py: >=20 > z=3D6 >=20 > def a(): > global z > # viel code > print("in a") > z-=3D1 > if z>0: b() > # viel code >=20 > mb.py: >=20 > def b(): > global z > # viel code > print("in b") > a() > # viel code >=20 > Der Aufruf von >=20 > 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-c= ycle. 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=E4ngig voneinander den Namen z. Nach der= ersten Zuweisung enthalten die Variablen also verschieden Werte. Mit normalen Imports kannst du dich f=FCr ein Modul entscheiden; wenn z =3D ... in ma definiert ist, kannst du von mb lesend und schreibend mit dem=20 qualifizierten Namen darauf zugreifen: print(ma.z) ma.z +=3D 42 Auch mb.b und mb.a sind beide zum Zeitpunkt des ersten Zugriffs definie= rt. Unabh=E4ngig von konkreten Problemen w=FCrde ich mir den Code noch einm= al=20 daraufhin ansehen, ob er sich so umformulieren l=E4sst, dass der refere= nce- cycle vermieden wird.