Seite 1 von 1

import innerhalb von Funktionen ?

Verfasst: Sonntag 14. März 2010, 17:08
von KlausMerkert
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

Verfasst: Sonntag 14. März 2010, 17:25
von 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.

Verfasst: Sonntag 14. März 2010, 19:16
von KlausMerkert
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

Verfasst: Sonntag 14. März 2010, 19:23
von 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)])

Verfasst: Montag 15. März 2010, 08:28
von KlausMerkert
Hallo lunar,

vielen Dank!

Viele Grüße

Klaus Merkert