mehrere kleinere fragen

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
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

hi leutz, ein paar fragen


was bedeutet das:

Code: Alles auswählen

if __name__ == "__main__":
    doSth()
und das (bakclslash):

Code: Alles auswählen

return a()/b()
und das?

Code: Alles auswählen

[i if for i in u is i] #oder so aenlich...
danke
BlackJack

Costi hat geschrieben:was bedeutet das:

Code: Alles auswählen

if __name__ == "__main__":
    doSth()
`__name__` wird vom Interpretierer an den Namen des Moduls gebunden, ausser wenn das Modul nicht importiert, sondern als Programm ausgeführt wird: Dann wird `__name__` an die Zeichenkette '__main__' gebunden. So kann man bedingten Code ausführen wenn das Modul als Programm ausgeführt wird und es trotzdem auch als Modul importieren ohne das der Code ausgeführt wird, der durch dieses ``if`` geschützt ist.
und das (bakclslash):

Code: Alles auswählen

return a()/b()
Ich kann da keinen Backslash erkennen!? Soll dir jetzt wirklich jemand Funktionsaufrufe und Division erklären!?
und das?

Code: Alles auswählen

[i if for i in u is i] #oder so aenlich...
Oder so ähnlich. Das ist eine syntaktisch falsche "list comprehension". Eine kürzere Schreibweise für eine Schleife in der eine Liste erzeugt wird:

Code: Alles auswählen

a = list()
for i in u:
    if test(i):
        a.append(f(i))

# <=>

a = [f(i) for i in u if test(i)]

# <=>

a = map(f, filter(test, u))
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

thx!
Ich kann da keinen Backslash erkennen!? Soll dir jetzt wirklich jemand Funktionsaufrufe und Division erklären!?
ich seh das oefter bei scripts, die scapy benutzen, zb:

Code: Alles auswählen

mport sys
from scapy import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()
oder:

Code: Alles auswählen

def make_test(x,y):
    return Ether()/IP()/Test(test1=x,test2=y)
BlackJack

Nun, man kann den Divisionsoperator bei eigenen Typen mit beliebiger Funktion "überladen". Leute die das wirklich beliebig tun sollte man IMHO aber kräftig in den Allerwertesten treten.

Da musst Du also in der Doku nachlesen was sich die scapy Programmierer dabei gedacht haben.
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

die documentation von scapy ist ziemlich schlecht, am besten ich guck im queltext nach. muesste aber dafuer wissen wie die spezial def heist um die '/' evaluation zu bestimmen (also __???__)

und wenn ich schon dabei bin alle meine kleinere unwisenheiten ueber python aufzudeken:

warum zwei klammern in zb:

Code: Alles auswählen

socketObj.connect(('www.freibier.de', 80))

danke
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

du übergibst einfach ein tuple.
bei anderen protokollen bräuchtest du andere angaben,
daher kommt alles in einen tuple, der dann spezifisch ausgelesen werden kann.
http://www.cs.unm.edu/~dlchao/flake/doom/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Bei Scapy wird der Slash-Operator überladen, um Pakete aus verschiedenene Schichten (IP, TCP/UDP, etc.) zusammen zu setzen (<- ich glaube, nach der neuen Rechtschreibreform ist das so korrekt, auch wenn's merkwürdig aussieht).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo!
Costi hat geschrieben:was bedeutet das:

Code: Alles auswählen

if __name__ == "__main__":
    doSth()
[wiki=Import#AusfhrungAlsSkript]Hier beschrieben[/wiki].
Costi hat geschrieben:und das?

Code: Alles auswählen

[i if for i in u is i] #oder so aenlich...
[wiki=Neue Features#ListComprehensions]Hier beschrieben[/wiki].

Bitteschön.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten