Seite 1 von 1

mehrere kleinere fragen

Verfasst: Mittwoch 4. Oktober 2006, 12:45
von Costi
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

Re: mehrere kleinere fragen

Verfasst: Mittwoch 4. Oktober 2006, 13:35
von 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))

Verfasst: Mittwoch 4. Oktober 2006, 13:45
von Costi
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)

Verfasst: Mittwoch 4. Oktober 2006, 13:51
von 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.

Verfasst: Mittwoch 4. Oktober 2006, 15:18
von Costi
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

Verfasst: Mittwoch 4. Oktober 2006, 15:25
von murph
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.

Verfasst: Donnerstag 5. Oktober 2006, 13:48
von Y0Gi
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).

Re: mehrere kleinere fragen

Verfasst: Donnerstag 5. Oktober 2006, 20:09
von Leonidas
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.