import innerhalb von Funktionen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KlausMerkert
User
Beiträge: 22
Registriert: Freitag 22. Mai 2009, 11:16

Liebe Experten,

ist es ungeschickt, innerhalb einer Funktion import zu verwenden?
Oder anders gefragt, wie sollte folgender Code eurer Meinung nach aussehen?

Code: Alles auswählen

def beep(frequency,duration):
    import sys
    platform = sys.platform
    if platform == 'win32':
        import winsound
        winsound.Beep(frequency,duration)
    elif platform == 'linux2':
        import os
        os.system('beep -f '+str(frequency)+' -l '+str(duration))
Viele Grüße

Klaus Merkert
lunar

Nach Möglichkeit solltest Du auf lokale Imports verzichten, und stattdessen alle benötigen Abhängigkeiten an einer einzigen Stelle importieren. In diesem Fall betrifft das "os" und "sys", die in der Funktion eigentlich nichts zu suchen haben. "winsound" lokal zu importieren, ist in dieser Situation allerdings ok.

Statt "os.system()" solltest Du im Übrigen auch besser "subprocess" nutzen.
KlausMerkert
User
Beiträge: 22
Registriert: Freitag 22. Mai 2009, 11:16

Hallo lunar,

also eher so:

Code: Alles auswählen

import sys

platform = sys.platform
if platform == 'win32':
    import winsound
elif platform == 'linux2':
    import os
    
def beep(frequency,duration):
    if platform == 'win32':
        winsound.Beep(frequency,duration)
    elif platform == 'linux2':
        os.system('beep -f '+str(frequency)+' -l '+str(duration))
Die Sache mit subprocess durchschaue ich noch nicht.

Viele Grüße

Klaus Merkert
lunar

In diesem speziellen Fall würde ich das eher so schreiben:

Code: Alles auswählen

import sys
if sys.platform == 'win32':
    import winsound
    beep = winsound.Beep
else:
    from subprocess import check_call
    def beep(frequency, duration):
        check_call(['beep', '-f', str(frequency), '-l', str(duration)])
KlausMerkert
User
Beiträge: 22
Registriert: Freitag 22. Mai 2009, 11:16

Hallo lunar,

vielen Dank!

Viele Grüße

Klaus Merkert
Antworten