Skip to content

Python Snabbreferens

Python är ett plattformsoberoende programmeringsspråk. Det är ett objektorienterat, dynamiskt typat språk som ursprungligen designades för att skriva automatiseringsskript (shell). Med ständiga uppdateringar och nya funktioner används det alltmer för utveckling av fristående, storskaliga projekt.

Allmänt

  • Python är skiftlägeskänsligt (skiljer på stora och små bokstäver)
  • Indexering i Python börjar på 0
  • Python använder indrag (tabbar eller blanksteg) för att strukturera kod istället för klammerparenteser.

Hjälp

Hjälpsida help()
Funktionshjälp help(str.replace)
Modulhjälp help(re)

Moduler (Bibliotek)

Lista modulinnehåll dir(module1)
Ladda modul import module1 *
Anropa funktion från modul module1.func1()

import-satsen skapar ett nytt namnområde och kör alla satser i den tillhörande .py-filen. Om du vill ladda modulinnehållet i det aktuella namnområdet, använd from module1 import *.

Skalära typer

Kontrollera datatyp: type(variable)

Heltal (Integers)

int/long - Stora heltal konverteras automatiskt till long.

Flyttal (Floats)

float - 64-bitars, det finns ingen “double”-typ.

Booleans

bool - True eller False.

Strängar (Strings)

str - Python 2.x standard: ASCII; Python 3: Unicode.

  • Strängar kan omslutas av enkla, dubbla eller trippla citattecken.
  • En sträng är en sekvens av tecken och kan därför behandlas som andra sekvenser.
  • Specialtecken kan hanteras med \ eller genom att använda prefixet r för raw strings.
    str1 = r'this\f?ff'
  • Strängformatering kan göras på flera sätt:
    template = '%.2f %s haha $%d'
    str1 = template % (4.88, 'hola', 2)

str(), bool(), int() och float() är också explicita typkonverteringsfunktioner.

Null-värde

NoneType(None) - Pythons motsvarighet till ’null’ (det finns bara en instans av None-objektet).

  • None är inte ett reserverat nyckelord, utan den enda instansen av “NoneType”.
  • None är det vanligaste standardvärdet för valfria funktionsparametrar:
    def func1(a, b, c = None)
  • Vanlig användning av None:
    if variable is None:

Datum och Tid

datetime - Inbyggd “datetime”-modul som tillhandahåller typerna “datetime”, “date”, “time”.

  • “datetime” kombinerar information lagrad i “date” och “time”.
    Skapa datum/tid från sträng dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’)
    Hämta “date”-objekt dt1.date()
    Hämta “time”-objekt dt1.time()
    Formatera datum/tid till sträng dt1.strftime(’%m/%d/%Y %H:%M’)
    Ändra fältvärden dt2 = dt1.replace(minute=0, second=30)
    Beräkna skillnad diff = dt1 - dt2 # diff är ett ‘datetime.timedelta’-objekt

Datastrukturer

Tupler

En tupel är en sekvens med fast längd som inte kan modifieras.

Skapa tupel tup1=4,5,6 eller tup1 = (6,7,8)
Skapa nästlad tupel tup1 = (4,5,6), (7,8)
Konvertera sekvens/iterator till tupel tuple([1, 0, 2])
Slå ihop tupler tup1 + tup2
Packa upp tupel a, b, c = tup1
Byta plats på variabler b, a = a, b

Listor

En lista är en sekvens med variabel längd och modifierbara element.

Skapa lista list1 = [1, ‘a’, 3] eller list1 = list(tup1)
Slå ihop listor list1 + list2 eller list1.extend(list2)
Lägg till i lista list1.append(‘b’)
Infoga på position list1.insert(posIdx, ‘b’)
Ta bort element via index valueAtIdx = list1.pop(posIdx)
Ta bort första förekomst av värde list1.remove(‘a’)
Kontrollera om värde finns i listan 3 in list1 => True
Sortera lista list1.sort()
Sortera med funktion list1.sort(key=len) # efter längd

Notera:

  • “start”-index ingår, men “stop”-index exkluderas.
  • start/stop kan utelämnas, standard är början/slutet.

Slicing

Sekvenstyper inkluderar ‘str’, ‘array’, ’tuple’, ’list’ etc.

list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]

Dictionaries (Hash)

Skapa dictionary dict1 = {‘key1’ : ‘value1’, 2 : [3, 2]}
Dictionary via zip dict(zip(keyList, valueList))
Hämta element dict1[‘key1’]
Ändra/lägg till element dict1[‘key1’] = ’newValue’
Hämta värde med fallback dict1.get(‘key1’, defaultValue)
Kontrollera om nyckel finns ‘key1’ in dict1
Ta bort element del dict1[‘key1’]
Lista med nycklar dict1.keys()
Lista med värden dict1.values()
Uppdatera dictionary dict1.update(dict2)

Set (Mängder)

Ett set är en oordnad samling av unika element.

Skapa set set([3, 6, 3]) eller {3, 6, 3}
Kontrollera delmängd (subset) set1.issubset(set2)
Kontrollera övermängd (superset) set1.issuperset(set2)
Kontrollera likhet set1 == set2
Union (or) set1
Snitt (intersection/and) set1 & set2
Differens set1 - set2
Symmetrisk differens (xor) set1 ^ set2

Funktioner

  • Grundform

    def func1(posArg1, keywordArg1 = 1, ..):
  • “Funktioner är objekt” - vanlig användning:

    def func1(ops = [str.strip, user_define_func, ..], ..):
        for function in ops:
            value = function(value)
  • Returvärden

    • Om ingen return-sats finns, returneras None.
    • Returnera flera värden via en tupel:
     return (value1, value2)
     value1, value2 = func1(..)
  • Anonyma funktioner (Lambda)

    lambda x : x * 2
    # motsvarar: def func1(x) : return x * 2

Användbara funktioner

  1. Enumerate: Returnerar en sekvens av (index, värde)-tupler.

    for key, val in enumerate(collection):
  2. Sorted: Sorterar valfritt itererbart objekt.

    sorted([2, 1, 3]) => [1, 2, 3]
  3. Zip: Grupperar element från flera sekvenser till tupler.

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
  4. Reversed: Returnerar en omvänd iterator.

    list(reversed(range(10)))

Kontrollflöde

  1. Villkorsoperatorer:

    Kontrollera identiska objekt var1 is var2
    Kontrollera olika objekt var1 is not var2
    Kontrollera lika värden var1 == var2
  2. Vanlig användning av ‘for’:

    for element in iterator:
  3. ‘pass’ - gör ingenting, används som platshållare.

  4. Ternärt uttryck:

    value = true-expr if condition else false-expr
  5. Ingen switch/case-sats i äldre versioner, använd if/elif.

Objektorientering

  1. ‘object’ är basen för alla Python-typer.

  2. Allt (nummer, sträng, funktion, klass, modul) är ett objekt och har en ’type’. Variabler är pekare till deras plats i minnet.

  3. Grundform för en klass:

    class MyObject(object):
        # 'self' motsvarar 'this' i Java/C++
        def __init__(self, name):
            self.name = name
    
        def memberFunc1(self, arg1):
            ..
    
        @staticmethod
        def classFunc2(arg1):
            ..
    
    obj1 = MyObject('name1') 
    obj1.memberFunc1('a') 
    MyObject.classFunc2('b')
  4. Inspektionsverktyg:

    dir(variable1) # Listar alla tillgängliga metoder på objektet

Strängoperationer

Slå ihop lista/tupel med separator:

', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

Formatera sträng:

string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')

Dela upp sträng:

sep = '-'
stringList1 = string1.split(sep)

Slicing av sträng:

start = 1
string1[start:8]

Fyll sträng med nollor (zfill):

month = '5'
month.zfill(2) => '05' 

Undantagshantering (Exceptions)

  1. Grundform
try:
    ..
except ValueError as e:
    print(e)
except (TypeError, AnotherError):
    ..
except:
    ..
finally:
    ..
  1. Manuella undantag:
raise AssertionError # Assertion misslyckades
raise SystemExit # Begär att programmet avslutas
raise RuntimeError('Error message :..')

List, Set och Dict Comprehensions

Syntaktiskt socker för att göra koden mer lättläst.

  1. List Comprehension: Skapar en ny lista genom att filtrera och transformera element i en samling.

    [expr for val in collection if condition]
  2. Dictionary Comprehension:

    {key-expr : value-expr for value in collection if condition}
  3. Set Comprehension: Samma som list comprehension, men använder {} istället för [].

  4. Nästlad List Comprehension:

    [expr for val in collection for innerVal in val if condition]