1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Python

    • Frage
  • Raiden
  • 1. Juni 2007 um 19:04
  • Unerledigt
  • Raiden
    5
    Raiden
    Mitglied
    Reaktionen
    3
    Punkte
    268
    Beiträge
    46
    • 1. Juni 2007 um 19:04
    • #1

    Code von http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/502261

    Python
    #!/usr/bin/env python
    from distutils.core import setup
    from distutils.extension import Extension
    import commands
    
    
    def pkgconfig(*packages, **kw):
        flag_map = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'}
        for token in commands.getoutput("pkg-config --libs --cflags %s" % ' '.join(packages)).split():
            kw.setdefault(flag_map.get(token[:2]), []).append(token[2:])
        return kw
    
    
    setup(
        name = "myPackage",
        ext_modules=[
            Extension('extension', ['extension_main.c'], **pkgconfig('glib-2.0')),
        ],
    )
    Alles anzeigen

    Kann mir jemand sagen was die * bzw. ** Notation bedeutet?

    Code
    ...
    def pkgconfig(*packages, **kw):
    ...
            Extension("extension", ['extension_main.c'], **pkgconfig('glib-2.0')),
  • max_rayman
    9
    max_rayman
    Mitglied
    Reaktionen
    17
    Punkte
    887
    Beiträge
    169
    • 1. Juni 2007 um 19:48
    • #2

    In Python hast du die Möglichkeit eine Funktion zu definieren ohne zu wissen wieviele Parameter es gibt. Das heisst die Anzahl der Parameter kann sich zur Laufzeit ändern.

    * bedeutet du kriegst alle übergebenen Parameter als Tupel Liste
    ** bedeutet du kriegst alle übergebenen Parameter als Dictionary

    Du könntest dann auch noch sowas schreiben:

    Code
    def foo( bar1, bar2, *bar3 ):
    ...

    Das würde dann bedeuten gib mir die ersten zwei Parameter als bar1 und bar2 und alle weiteren in bar3 als Tupel Liste.

  • Raiden
    5
    Raiden
    Mitglied
    Reaktionen
    3
    Punkte
    268
    Beiträge
    46
    • 1. Juni 2007 um 19:54
    • #3

    ah, danke verstehe

    und die andere Zeile heisst Ergebnis von pkgconfig ist ein Dict?

    Code
    Extension("extension", ['extension_main.c'], **pkgconfig('glib-2.0')),
  • max_rayman
    9
    max_rayman
    Mitglied
    Reaktionen
    17
    Punkte
    887
    Beiträge
    169
    • 1. Juni 2007 um 20:56
    • #4
    Code
    Extension("extension", ['extension_main.c'], **pkgconfig('glib-2.0')),

    Soweit ich das richtig sehe wird hier Extension instanziert und es gibt den einen StringParameter einen Listen Paramter und danach (pkgconfig) gibts es wieder ein Dictionary mit den restlichen Paramtern. Was das glib.. in den Klammern bedeutet kann ich dir leider auch net sagen.

  • Raiden
    5
    Raiden
    Mitglied
    Reaktionen
    3
    Punkte
    268
    Beiträge
    46
    • 1. Juni 2007 um 21:19
    • #5

    damit ists mir dann klar.
    danke nochmals

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 1. Juni 2007 um 23:07
    • #6
    Zitat
    Code
    Extension("extension", ['extension_main.c'], **pkgconfig('glib-2.0'))


    * und ** machen bei einem Funktionsaufruf im Prinzip genau das
    Gegenteil von dem, was sie in einer Funktionsdefinition tuen:

    Code
    ben@kafka:~$ python
    Python 2.5.1 (r251:54863, May  2 2007, 16:56:35) 
    [GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def foo(a,b):
    ...   print("a=%s, b=%s"%(a,b))
    ... 
    >>> foo(*[1,2])
    a=1, b=2
    >>> foo(**{'a':2,'b':1})
    a=2, b=1
    >>>
    Alles anzeigen

    " pkgconfig('glib-2.0') " erstellt also ein dictionary, welches als
    Schlüssel die Namen der Argumente, und als values deren Werte enthält.

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung