Kurs Python Część 1

Zespół Learnetic

Andrzej Krawczyk

Python

  • Język wysokiego poziomu
  • Język skryptowy
  • Język interpretowany
  • Język dynamiczny
  • Język szerokiego zastosowania

Cechy Pythona

  • Dynamiczne typowanie
  • Automatyczne zarządzanie pamięcią
  • Garbage Collector
  • Obiektowo orientowany
  • Wbudowane typy
  • Batteries included
  • Open source
  • Przenośny
  • Łatwy w nauce
  • Szybki proces implementacji
  • Bardzo czytelny i elegancki

Zastosowania Pythona

  • GUI (wxPython, PyGtk, pyQT)
  • Aplikacje Webowe (Django, DjangoCMS, Flask)
  • Integracje komponentów
  • Data science (Anaconda, Jupyter)
  • Gry, grafika
  • Błyskawiczne prototypowanie

Wiele paradygmatów

  • Programowanie strukturalne
  • Programowanie obiektowe
  • Programowanie funkcyjne

Zen of Python

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than right now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

Pierwszy Program

x86

C

Java

Perl

print "Hello World!\n";

Python 2.x

print "Hello world!"

Python 3.x


In [ ]:
print("Hello world!")

Uruchomiene Aplikacji

  • Z poziomu konsoli

    python program.py

  • Shebang (Unix)

    !/usr/bin/env python3

  • Prawa wykonywania

    chmod u+x program.py

  • Interaktywny Interpreter

    ipython

Składnia

  • instrukcje nie są zakończone średnikiem
  • bloki kodu są definiowane przez wcięcia
  • wiele angielskich słów
  • komentarz #
  • zminimalizowany zbiór instrukcji

PEP8

  • wcięcia 4 spacje
  • Długość lini 79
  • Importowanie per linia, na poczatku modułu, kolejność priorytetowa
  • (2 + 3), 4

In [ ]:
#wyrównanie do nawiasu otwierającego
foo = moja_dluga_funkcja(zmienna_jeden, zmienna_dwa
                         zmienna_trzy, zmienna_cztery)

# zwiększone wcięcia aby rozróżnić funkcję od ciała funkcji
def moja_dluga_funkcja(
        zmienna_jeden, zmienna_dwa, zmienna_trzy,
        zmienna_cztery):
    print(zmienna_jeden)

foo = moja_dluga_funkcja(
    zmienna_jeden, zmienna_dwa,
    zmienna_trzy, zmienna_cztery)

In [ ]:
# Może być w tym przypadku inna ilość wcięć niż 4
foo = moja_dluga_funkcja(
  zmienna_jeden, zmienna_dwa,
  zmienna_trzy, zmienna_cztery)

In [ ]:
moja_lista = [
    1, 2, 3,
    4, 5, 6,
    ]

wynik = funkcja_przyjmujaca_argumenty(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

# dozwolone też wyrównanie z początkiem lini otwierającej wielowierszową konstrukcję

moja_lista = [
    1, 2, 3,
    4, 5, 6,
]

wynik = funkcja_przyjmujaca_argumenty(
    'a', 'b', 'c',
    'd', 'e', 'f',
)

In [ ]:
przychod = (zarobki_brutto
            + zwrot_z_podatku
            + (dywidendy - podatek_od_dywidend)
            - ubezpieczenie_samochodu
            - kredyt_studencki)

In [ ]:
#Dobrze:
import os
import sys

#Źle:  
import sys, os
    
#Dobrze:
from subprocess import Popen, PIPE

In [ ]:
"""Przykładowy moduł.

Coś tutaj się dzieje.
"""

from __future__ import jakiś_moduł

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Andrzej Krawczyk'

import os
import sys

In [ ]:
#Dobrze:
def average(count, length=5):
    return foo(c=count, l=length)

#Źle:
def complex(count, length = 5):
    return foo(c = count, l = length)

Biblioteki, Narzędzia

  • requests
  • scrapy
  • twisted / tornado
  • mypy - optional static typying for python
  • python-attrs www.attrs.org
  • ipython

Golang następcą Pythona?

Python 2 / 3

  • CPython
  • Cython
  • Jython
  • IronPython
  • PyPy
  • Stackless Python