Python logo

Programmering med Python

Focus mode
Light/dark-mode

Fortsättning Python

1. Egna moduler#

Ett sätt att strukturera större programmeringsprojekt är att flytta kod till egna moduler. På så sätt gömmer man undan onödiga detaljer som inte är relevanta för huvudflödet i programmet. Detta är en princip som i mjukvaruutveckling kallas för abstraktion (eng. abstraction).

För att skapa en egen modul skapar man en ny python-fil i samma mapp som ens huvudfil. Se till att filen har filändelsen .py. I den nya filen lägger man den kod man vill flytta från huvudprogrammet - grupperat i funktioner. Namnet på filen (om man bortser från filändelsen) blir modulens namn.

Modulen importerar man sedan med import högst upp i ens huvudprogram.

1.1 Exempel på en egen modul#

usermanager.py
import random

def create_username(fullname):
    """Generates a username based on first and last name"""
    first_name, last_name  = fullname.lower().split()
    username = first_name[:3] + last_name[:3]
    return username


def create_password(letters = 8):
    """Generate a random password"""
    consonants = list('bcdfghjklmnpqrstvwxz')
    vowels = list('aeioyu')

    password = ""

    for i in range(0, letters):
        if i % 2 == 0:
            password += random.choice(vowels)
        else:
            password += random.choice(consonants)

    password += str(random.randrange(10, 99))
    return password

Denna modul kan sedan användas på följande sätt:

main.py
import usermanager

username = usermanager.create_username('Markus Pettersson')
password = usermanager.create_password()

print('Användarnamn:', username)
print('Lösenord:', password)

1.2 Ange ett alias för importerad modul#

Om man tycker att ett modulnamn är för långt (eller för att undvika en namnkonflikt) kan man ange ett alias för moduler man importerar.

import usermanager as um

username = um.create_username('Markus Pettersson')
password = um.create_password()

print('Användarnamn:', username)
print('Lösenord:', password)

1.3 Importera enstaka funktioner#

Om man inte behöver all funktionalitet från en modul kan man importera enstaka funktioner med from:

from usermanager import create_username

username = create_username('Markus Pettersson')
print('Användarnamn:', username)

2. Använda en main-funktion#

För mer avancerade program (där man till exempel använder flera egna funktioner) är det klokt att skapa en main-funktion som innehåller den kod som ska köras när man startar programmet. Inom mjukvaruutveckling kallar man det programmets entry point.

För att ange att det är den funktionen som ska köras vid start lägger man till en if-sats längst ner i programmet.

2.1 Program med main-funktion#

def do_stuff():
  """Do important stuff"""
  print('Doing stuff.')


def do_more_stuff():
  """Doing more important stuff"""
  print('Doing more stuff.')


def main():
  """Main function. Will run at start"""
  print('Running program.')
  do_stuff()
  do_more_stuff()

# If-satsen kollar ifall vi är i huvudprogrammet.
# Om den här python-filen är importerad som en modul i ett annat
# program kommer inte main-funktionen att köras. 
if __name__ == '__main__':
  main()

Det if-satsen i slutet av programmet gör är att kontrollera ifall koden som körs befinner sig i huvudprogrammet och inte i en importerad modul. På så sätt kan programmet användas som en modul av andra program utan att koden körs automatiskt vid import.

3. List comprehension#

List comprehension är ett sätt att med kompakt syntax skapa en ny lista baserat på värden från en annan lista. I många fall kan man ersätta en for-loop med en list comprehension.

3.1 Enkel list comprehension#

I exemplet går man igenom en lista med, och metoden upper() körs för varje frukt.

# Gå igenom en lista och gör alla strängar till VERSALER

fruits = ['apple', 'banana', 'kiwi', 'pear', 'pineapple']
upper_fruits = [f.upper() for f in fruits]

print(upper_fruits)

# → ['APPLE', 'BANANA', 'KIWI', 'PEAR', 'PINEAPPLE']

3.2 Filtrera med list comprehensions#

Med list comprehensions kombinerat med en if-sats kan man filtrera en lista. Värdet läggs bara till i den nya listan ifall villkoret är uppfyllt.

fruits = ['apple', 'banana', 'kiwi', 'pear', 'pineapple']
long_fruit_names = [f for f in fruits if len(f) > 4]

print(long_fruit_names)

# → ['apple', 'banana', 'pineapple']

3.3 Skapa en ny lista utifrån en funktions returvärden#

Här används list comprehension för att skapa en ny lista med de betyg som ett provresultat ger.

def get_grade(score):
  ''' Return a grade (A-F) depending of test score'''
  if score  > 90:
    return 'A'
  elif score > 80:
    return 'B'
  elif score > 70:
    return 'C'
  elif score > 60:
    return 'D'
  elif score > 50:
    return 'E'
  return 'F'

# En lista med testresultat
scores = [23, 45, 12, 56, 78, 23, 95, 54, 82, 34, 45]

# Skapa en ny lista med betyg (baserat på testresultat)
grades = [get_grade(score) for score in scores]

print(grades)

3.4 Sammanställning av förekomst#

Med list-metoden count() kan man räkna förekomster av ett visst värde i en lista. I exemplet räknar vi hur ofta ett visst betyg förekommer i listan grades. Med en dict comprehesion sammanställer vi resultatet i en dictionary.

grades = ['D', 'C', 'A', 'D', 'F', 'D', 'A', 'E', 
          'B', 'D', 'E', 'E', 'F', 'E', 'B', 'F']

grade_options = ('A', 'B', 'C', 'D', 'E', 'F')

summary = {grade: grades.count(g) for g in grade_options}
print(summary)

# {'A': 2, 'B': 2, 'C': 1, 'D': 4, 'E': 4, 'F': 3}

3.5 Ta ut en kolumn från tabellstruktur (CSV)#

Om man har en datastruktur med listor i listor (som t.ex. en CSV-fil) och vill bara ha ut värdena från en kolumn kan man göra det enkelt med list comprehensions.

column_1 = [row[0] for row in data]

Scenario: vi har enkätsvar i ett kalkylark (som vi lätt kan exportera som CSV-fil). I enkäten har 50 personer angett sina favoriter vad gäller glass, godis och maträtter. Vi vill ta reda på hur många procent som föredrar de olika glassarna.

Så här ser kalkylarket ut:

icecream candy foods
cornetto marabou mjölkchoklad tacos
daimstrut kexchoklad husmanskost
cornetto marabou mjölkchoklad pizza
daimstrut kexchoklad sushi

Så här ser koden ut som tar ut första kolumnen från CSV-datan och beräknar procenten:

import csv

# Öppna filen
with open('favourites.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)
    # Hoppa över första raden (med kolumnrubriker)
    next(csvreader)

    # Andvänd list comprehension för att skapa en 
    # lista med första kolumnens värden
    icecream = [row[0] for row in csvreader]

# Skapa ett set med alla unika värde (alla olika glass-sorter)
unique_values = set(icecream)

# Skapa en lista med tuplar för varje glass-sort
# Första positionen i tupeln blir glassens namn, 
# den andra är andelen svar
result = [(i, icecream.count(i) / len(icecream)) for i in unique_values]

# Skriv ut resultatet på ett prydligt sätt med f-strings
for r in result:
    print(f'{r[0].capitalize():<13} {r[1]:>5.1%}')

4. OOP - Objektorienterad programmering#

Objektorienterad programmering (OOP) i Python är ett sätt att strukturera kod med hjälp av objekt. Objekt representerar ofta verkliga saker eller koncept (till exempel en produkt, användare, NPC i ett spel etc). Man kan likna ett objekt med en samling variabler och funktioner (kodstycken) som hör ihop.

OOP gör koden mer modulär, återanvändbar och lättare att underhålla. Att arbeta med klasser och objekt är också en metod för abstraktion - att gömma undan detaljer för att göra helheten mindre komplex.

4.1 Begrepp inom OOP#

  • Klass (class): En mall eller "ritning" för objekt. I klassen definieras attribut (variabler) och metoder (funktioner).
  • Objekt (instanser): En konkret tillämpning av en klass, t.ex. en specifik produkt, en specifik NPC etc.
  • Attribut: Variabler kopplade till en klass/objekt som beskriver objektets egenskaper (t.ex. färg, namn, ålder). Varje objekt har sina egna värden på attributen.
  • Metoder: Funktioner som definieras i en klass och kan användas på objekt. Vad objektet kan "göra".

4.2 Exempel på en klass#

# Definiera en klass

class Dog:
    """A class representing a dog."""
    def __init__(self, name, age):
        self.name = name    # attribut
        self.age = age

    def bark(self):         # metod
        print(f"{self.name} säger: Voff!")


# Skapa objekt (instanser)
elmo = Dog("Elmo", 3)
fido = Dog("Fido", 5)


# Använda metoder och attribut
elmo.bark()        
print(fido.age)


# →'Elmo säger: Voff!'
# → 5

4.3 Arv inom OOP#

Arv är när en klass (child class) tar över egenskaper och metoder från en annan klass (parent class). Det används för att återanvända kod och skapa specialiserade versioner av en klass.

class Animal:
    """A class representiong an animal"""
    def __init__(self, name):
        self.name = name

    def eat(self, food):
      print(f'Yummy, {food}!')
      self.speak()

    def speak(self):
        return "Pip"


# Här är en klass för en hund som ärver från Animal
class Dog(Animal):
    """A class representing a dog"""
    def speak(self):
        print("Voff!")


# Här är en klass för en katt som ärver från Animal
class Cat(Animal):
    """A class representing a cat"""
    def speak(self):
        print("Mjau!")


elmo = Dog('Elmo')
sigge = Cat('Sigge')

elmo.eat('korv')
sigge.eat('fisk')

4.4 Exempel på en klass för ett blogginlägg#

class Post:
    """ A class representing a blog post"""
    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = author

    def save(self):
        """Saves the post to the database"""
        # TODO: Implement database saving
        pass

    def delete(self):
        """Delete the blog post"""
        # TODO: Implement database deletion
        pass

    def display(self):
        """Shows the post"""
        print(self.title)
        print(self.author)
        print(self.content)


post = Post(
        "A blogpost", 
        "This is my first post!", 
        "marpet"
      )

post.display()

4.5 När passar objektorienterad programmering ?#

I Python är det inte lika vanligt att jobba objektorienterat jämfört med andra populära programmeringsspråk (till exempel Java och C#). I Python är det istället vanligare att använda funktioner och moduler för att dela upp sina program.

Några situationer där det passar bra med objektorienterad programmering är:

  • Simuleringar och spel. Här behöver man ofta många liknande objekt som alla har olika egenskaper. (Karaktärer, partiklar, föremål etc.)
  • Webbutveckling. Här kan man använda klasser för att representera sidor, inlägg, kommentarer, användare, produkter i en webbshop etc.
  • I ekonomirelaterade applikationer. Här kan klasser representera konton, transaktioner, beställningar.

I många applikationer använder man databaser i kombination med klasser och objekt. Objektens olika värden lagras i en databas och när ett objekt skapas laddas dess egenskaper från databasen.

5. Dataformatet JSON#

JSON står för JavaScript Object Notation och är (precis som CSV) ett textbaserat format för att lagra och utbyta data. Det används ofta när data skickas mellan en server och en webbläsare eller sparas i filer. (Till exempel konfigurationsfiler för program eller sparfiler för spel.)

Den stora skillnaden mellan JSON från CSV är att du i JSON kan ha nästlade datastrukturer. Du kan alltså kombinera dictionaries med listor på flera olika sätt. I exemplet nedan har vi en lista som innehåller dictionaries över filmer, varje film har i sin tur en lista för skådespelarna.

5.1 JSON-formatet#

  • Data representeras som nyckel–värde-par precis som dictionaries i Python.
  • Objekt skrivs inom { } (motsvarar dictionaries i Python).
  • Listor (arrayer) skrivs inom [ ].
  • Strängar omges av dubbla citattecken " ".
  • Värden kan vara: strängar, tal, booleska (true/false), null, objekt eller listor.

5.2 Exempel på JSON-data#

[ 
 {
    "title": "Blade Runner 2049",
    "year": 2017,
    "imdb_rating": 8.0,
    "director": "Denis Villeneuve",
    "main_cast": ["Ryan Gosling", "Harrison Ford", "Ana de Armas"]
  },
  {
    "title": "Ex Machina",
    "year": 2014,
    "imdb_rating": 7.7,
    "director": "Alex Garland",
    "main_cast": ["Domhnall Gleeson", "Alicia Vikander", "Oscar Isaac"]
  },
    ...
]

5.3 Läsa och tolka JSON-data från fil#

Här finns den JSON-fil som används i exemplet: 🔗movies.json

import json

# Öppna och läs filen
with open("movies.json", "r", encoding="utf-8") as file:
    # Avkodar JSON till Python-objekt (lista med dictionaries)
    movies = json.load(file)  

# Skriv ut titlar och årtal
for movie in movies:
    print(movie["title"], "-", movie["year"])
    main_cast = ', '.join(movie['main_cast'])
    print('Actors: ' + main_cast)
    print('------------------------------------')

5.4 Spara Python-data som JSON#

import json

game_data = {
  'xp': 12,
  'levels': 5,
  'play_time': 512,
  'inventory': ['diamond pickaxe', 'ender eye'],
  "location": {'x': 123, 'y': 234, 'z': 65}
}

# Spara speldata till en fil
with open("save_file.json", "w", encoding="utf-8") as file:
    json.dump(game_data, file, indent=4) 

print("Data sparad till save_file.json")

6. Avancerad hantering av listor#

6.1 Funktionen zip - para ihop värden från listor#

Funktionen zip kan användas för att para ihop värden från två listor eller tuplar. (Funktionen funkar även med samlingen set, men då garanteras inte ordningen av värdena.)

Det funktionen returnerar är ett zip-objekt som sedan kan konverteras till den samling man önskar (dict, tupel eller lista).

days = ['Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag']
food = ['kebab', 'pizza', 'sushi', 'meatballs', 'tacos']

menu = zip(days, food)
menu = dict(menu)

print(menu)

# → {'Måndag': 'kebab', 'Tisdag': 'pizza', 'Onsdag': 'sushi', 
#     'Torsdag': 'meatballs', 'Fredag': 'tacos'}

6.2 Uppackning (unpacking) av samlingar#

Ibland vill man ta en lista (eller tupel) och tilldela dess värden till enskilda variabler. Det går att göra genom att ange flera variabelnamn separerade med kommatecken och tilldela dem listan:

user = ['Markus Pettersson', 'marpet', 'supersecret']

name, username, password = user

print('Namn:', name)
print('Användarnamn:', username)
print('Lösenord:', password)

6.3 Enumerate#

Ibland vill man iterera/gå igenom en lista och samtidigt ha tillgång till en räknare. (T.ex. om man vill rangordna något, som favoritfilmer eller liknande.) Ett smidigt sätt är att använda funktionen enumerate. Då kan man iterera en lista och samtidigt få tillgång till en räknare. Med argumentet start kan man ange räknarens startvärde.

fav_movies = ['Toy Story 2', 'Toy Story', 
              'Finding Nemo', 'Inside Out']

for number, movie in enumerate(fav_movies, start=1):
    print(number, movie)# → 1 Toy Story 2
#    2 Toy Story
#    3 Finding Nemo
#    4 Inside Out

6.4 Sortera en lista av dictionaries#

Här används funktionen sorted() i kombination med en lambda-funktion (en namnlös en-rads-funktion) för att sortera en lista med dictionaries på ett av dict:ens värden (score).

test_result = [
  {
    'student': 'Orvar Orvarsson',
    'class': 'TETE28',
    'score': 25
  },
  {
    'student': 'Anders Andersson',
    'class': 'TETE28',
    'score': 12
  },
  {
    'student': 'Nils Nilsson',
    'class': 'TETE28',
    'score': 42
  },  
]

ranking = sorted(test_result, key=lambda tr: tr['score'], reverse=True)

6.5 Gå igenom två listor samtidigt#

Med funktionen zip och unpacking kan vi gå igenom/iterera två listor samtidigt.

scores = [23, 45, 12, 56, 78, 23, 95, 54, 82, 34, 45]
grades = ['F', 'F', 'F', 'E', 'C', 'F', 
          'A', 'E', 'B', 'F', 'F']

for score, grade in zip(scores, grades):
    print(f"Score: {score} → Grade: {grade}")

# Score: 23 → Grade: F
# Score: 45 → Grade: F
# Score: 12 → Grade: F
# ...

7. Set - mängdteori och mängoperationer#

7.1 Lägg till och ta bort från ett set#

a_students = {'Gert', 'Berit', 'Eivor', 'Fanny'}

# Lägg till ett värde till set
a_students.add('Kjell')

# Ta bort ett värde från ett set
a_students.discard('Gert')

print(a_students)

7.2 Set - skillnader: difference()#

Med metoden difference får man ett nytt set med differensen mellan mängderna. I exemplet nedan får vi alltså namnen på de elever som inte finns i båda listorna.

# Alla elever i klassen
students = {'Anna', 'Bertil', 'Ceasar', 
            'David', 'Erik', 'Frida'}

# Närvarande elever
attending = {'David', 'Anna', 'Erik', 'Frida'}

# Vilka elever är frånvarande? Skillnaden mellan mängderna.
absent = students.difference(attending)

print(absent)

# → {'Bertil', 'Ceasar'}

7.3 Set - överlappande: intersection()#

Med metoden intersection får man ett nytt set med de element som finns i båda seten. Inom matematiken kallas detta för ett snitt.

# Alla elever i klassen
students = {'Anna', 'Bertil', 'Ceasar', 
            'David', 'Erik', 'Frida'}

# Mina vänner
friends = {'Ines', 'David', 'Henrik', 'Lisa', 
           'Erik', 'Frida', 'Johan', 'Klas'}

# Vilka av mina vänner går i min klass?
friends_in_class = friends.intersection(students)

print(friends_in_class)

# → {'Frida', 'David', 'Erik'}

7.4 Förena två set: union()#

Med metoden union() kan man förena två set. I exemplet nedan använder vi både union() och difference() för att hantera tre olika set.

# Vi vill ta reda på vilka elever i matte 5-gruppen 
# som inte går teknik eller natur

# Teknikelever
te_class = {'Adrian', 'Berit', 'Cathrine', 'Didrik', 'Eivor', 
            'Fanny', 'Gert', 'Hans', 'Igor', 'Jannike'}

# Naturelever
na_class = {'Krister', 'Lars', 'Marit', 'Noah', 'Ofelia',
            'Petrus', 'Qasim', 'Rickard', 'Steve', 'Thomas'}

# Elever i matte 5
ma5_group = {'Berit', 'Igor', 'Steve', 'Ulf', 
             'Marit', 'Qasim', 'Adrian', 'Gert', 
             'Wincent', 'Noah', 'Victor', 'Hans'}

# Förena natur- och teknikklasserna med .union
te_and_na = te_class.union(na_class)

# Ta reda på vilka i matte 5 som inte finns i klasserna
other = ma5_group.difference(te_and_na)

print(other)

# → {'Wincent', 'Ulf', 'Victor'}

7.5 Delmängd - issubset()#

Om man vill se om alla värden i ett set finns i ett annat set kan man använda metoden issubset. (Med matematiska begrepp vill vi alltså kontrollera om en mängd är en delmängd av en annan mängd.)

# Teknikelever
te_class = {'Adrian', 'Berit', 'Cathrine', 'Didrik', 'Eivor', 
            'Fanny', 'Gert', 'Hans', 'Igor', 'Jannike'}

# A-elever
a_students = {'Gert', 'Berit', 'Eivor', 'Fanny'}

print(a_students.issubset(te_class))

# → True

8. Decorators#

8.1 Vad är en decorator?#

En decorator är ett sätt att “lägga till funktionalitet” till en befintlig funktion, utan att ändra själva funktionen. Det gör man genom att “omsluta” funktionen med en annan funktion som körs före eller efter huvudfunktionen.

I exemplet nedan har vi en decorator som kontrollerar om användaren är inloggad innan funktionen körs.

8.2 Exempel på decorator#

# Simulerar en global variabel för inloggningsstatus
user_logged_in = False

# Här är vår decorator-funktion
def require_login(func):
    """Decorator checks if logged in."""
    def wrapper(*args, **kwargs):
        if not user_logged_in:
            print("Åtkomst nekad. Du måste logga in först.")
            return
        # Om användaren är inloggad körs den riktiga funktionen
        return func(*args, **kwargs)
    return wrapper


@require_login
def view_profile():
    print("Visar användarprofilen.")

@require_login
def edit_profile():
    print("Profil uppdaterad!")


# Anropa funktionen utan att vara inloggad
view_profile()      

# Simulera en inloggning
user_logged_in = True

# Anropa funktionen som inloggad
view_profile()

8.3 Varför decorators är användbara#

  • De låter dig återanvända logik (t.ex. rättighetskontroller, loggning, tidsmätning) utan att upprepa kod.
  • Du kan enkelt lägga till eller ta bort funktionalitet bara genom att lägga till eller ta bort en rad (@decorator).
  • De används ofta i webbramverk som Flask eller Django.

8.4 Vad är *args och **kwargs?#

8.5 *args#

  • Står för arguments.
  • Används för att skicka ett obestämt antal positionella argument till en funktion.
  • Argumenten samlas i en tuple.

8.6 Exempel på *args#

def summa(*args):
    """Sums all arguments"""
    return sum(args)

print(summa(1, 2, 3))  # → 6
print(summa(5, 10))    # → 15

8.7 **kwargs#

  • Står för keyword arguments.
  • Används för att skicka ett obestämt antal namngivna argument.
  • Argumenten samlas i en dictionary.

8.8 Exempel på **kwargs#

def print_key_and_value(**kwargs):
    """Print key and value from keyword arguments"""
    for key, value in kwargs.items():
        print(f"{key} = {value}")

skriv_ut(name="Elmo", breed="Cavapoo")

# → name = Elmo
#    breed = Cavapoo

8.9 Kombination av *args och **kwargs#

def exempel(*args, **kwargs):
    """Prints arguments and keyword arguments"""
    print("args:", args)
    print("kwargs:", kwargs)

exempel(1, 2, 3, a=4, b=5)

# → args: (1, 2, 3)
# → kwargs: {'a': 4, 'b': 5}

9. Rekursion#

Rekursion är när en funktion anropar sig själv, som i sin tur anropar sig själv etc. Det används inom programmering för att lösa matematiska problem eller för att gå igenom trädstrukturer som till exempel ett filsystem.

9.1 Beräkna fakultet#

Fakulteten är summan av produkten av alla positiva heltal från 1 upp till och med ett visst nummer. Fakulteten för 5 är alltså: 1 x 2 x 3 x 4 x 5 \= 120. En funktion som räknar ut fakulteten för ett nummer med rekursion kan se ut så här:

def factorial(n):
    """Calculate factorial for number n"""

    # Ifall numret är 0 eller 1 avsluta med att returnera 1
    if n == 0 or n == 1:
        return 1
    # Annars använd rekursion och anropa sig själv    
    else:
        return n * factorial(n - 1)

print(factorial(5))

# → 120

9.2 Fibonnaci-serien#

Fibonaccis talföljd är en välkänd talföljd där varje tal är summan av de två föregående Fibonaccitalen. De två första talen i serien är 0 och 1. En Fibonnaci-serie går enkelt att skapa med rekursion:

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

fib_series = [fibonacci(n) for n in range(10)]
print(fib_series)  

9.3 Genomgång av filsystem#

Här används modulen os tillsammans med rekursion för att lista alla filer i en mapp. När funktionen stöter på en undermapp listas den mappen också genom att anropa funktionen igen (med rekursion).

import os

def list_files(folder):
    """Prints all files and folder, including subfolders."""
    for item in os.listdir(folder):
        path = os.path.join(folder, item)
        if os.path.isfile(path):
            print(path)  # Hittad fil
        elif os.path.isdir(path):
            list_files(path)  # Gå in i undermappen 

# Exempel: lista alla filer i mappen 'images'
list_files("images")

10. Kryptering#

10.1 Enkel manuell kryptering#

Med funktionen ord för man ett teckens Unicode-värde. (Ett heltal mellan 1 och 1114111. ) Funktionen chr gör det motsatta - returnerar ett tecken från ett Unicode-värde.

def encode(message):
    """Returns a list of Unicode values."""
    return [ord(l) for l in message]

def decode(codes):
    """Processes a list of Unicode values. Returns a str"""
    return ''.join([chr(i) for i in codes])

coded_message = encode("I like Python")

print(coded_message)
print(decode(coded_message))

10.2 Hashing#

11. Kombinatorik#

* Kombinationer

* Permutationer

* Produkt

12. Pythons standardbibliotek#

Det finns omkring 300 moduler i Pythons inbyggda standardbibliotek. Här kommer en lista av de mest använda med en beskrivning vad de används till:

Modul Beskrivning
math Ger matematiska funktioner (t.ex. sinus, logaritmer, π, e).
random Slumptalsgenerering och val av slumpmässiga element.
statistics Grundläggande statistiska beräkningar som medelvärde och standardavvikelse.
decimal Exakta beräkningar med decimaltal (användbart för pengar).
fractions Hantering av rationella tal (bråk).
os Interaktion med operativsystemet, t.ex. filer och kataloger.
sys Systeminformation, programargument och tolkens inställningar.
pathlib Objektorienterat sätt att hantera filer och sökvägar.
shutil Kopiering, flyttning och radering av filer och mappar.
io Avancerad filhantering och dataflöden (streams).
datetime Hantering av datum, tider och tidsintervall.
time Tidtagning och pauser (sleep).
calendar Arbeta med kalendrar, veckodagar och datum.
urllib Hämta data från webben och hantera webbadresser.
http Skapa HTTP-klienter och -servrar.
socket Låg nivå-nätverkskommunikation (TCP/UDP).
re Reguljära uttryck för avancerad textmatchning.
argparse Hantering av kommandoradsargument.
logging System för loggning och felsökning.
json Läsning och skrivning av JSON-data (vanligt i webbtjänster).
csv Läsning och skrivning av CSV-filer (tabellformade data).
pickle Spara och läsa Python-objekt i binärt format.
collections Extra datastrukturer som Counter, deque och defaultdict.
itertools Effektiva verktyg för iterationer och kombinationer.
functools Funktioner som reduce, lru_cache och partial.
heapq Prioritetsköer och heap-baserade algoritmer.
unittest Ramverk för att skriva och köra tester.
doctest Testar kodexempel direkt i dokumentationen.
pdb Felsökning av program steg för steg.
zipfile / tarfile / gzip Hantering av komprimerade arkivfiler.