måndag 14 maj 2007

Lektion 2: Pythons fördelar

Python är dynamiskt typat. Det betyder att typningen undersöks runtime. Detta i stil med VB-skript, och i motsats till Java/C.

Python är starkt typat. Det betyder att ingen automagisk cast sker, man måste göra det uttryckligen. I stil med Java och i motsats till VB-skript.

I Python är allt ett objekt. En funktion, en klass, en instans, en sträng, en int, en lista, osv. Detta är en styrka vid snabb och enkel utveckling.

I Python är dokumentation inbyggt. Språket "rekommenderar" en att dokumentera och det går att få tag på dokumentationen runtime. Ljuvt!

I Python använder man inte braces som i C, utan i stället låter man indenteringsnivån avgöra vilket scope koden tillhör. Felaktig indentering -> kompileringsfel.

Åter till shellet. Skriv:

>>> def myFunction(data):
         print data

>>> myFunction(3.3)
3.3
>>> myFunction("Hej du glade")
Hej du glade

Som du ser så skiter myFunction i vad objektet "data" har för typ. Nu testar vi stark typning och omdefinierar myFunction:

>>> def myFunction(data1, data2):
         data = data1+data2
         print data

>>> myFunction(3.3, 5.5)
8.8
>>> myFunction(3.3, "Hej du glade")

Traceback (most recent call last):
File "", line 1, in
myFunction(3.3, "Hej du glade")
File "", line 2, in myFunction
data = data1+data2
TypeError: unsupported operand type(s) for +: 'float' and 'str'

En stack trace skrivs ut och resten är historia.

Att skicka ett funktionsobjekt är precis lika trivialt:

>>> def f1(param1, param2):
         param1(param2)

>>> def f2(data):
         print data+3

>>> f1(f2, 7)
10

Om man lägger en sträng direkt i början på en modul, klass eller funktion så blir det dokumentationssträngen, och hamnar som en medlemssträng i objektet och får
namnet __doc__. Såhär dokumenterar man:

>>> def minSuperFunction():
         "Detta är min supraledande funktion!"
         print "Jomenvisst!"

För att ta reda på dokumentationen kan du gå den tramsiga vägen:

>>> minSuperFunction.__doc__
'Detta \xe4r min supraledande funktion!'

Eller om du vill vara cool:

>>> help(minSuperFunction)
Help on function minSuperFunction in module __main__:

minSuperFunction()
         Detta är min supraledande funktion!

Den inbyggda functionen help() drar rekursivt igenom dokumentationen i ett objekt och skriver ut den snyggt.

Självdokumenterande kod är en utopi, men detta tar en ett steg närmare, inte sant?

Inga kommentarer: