01. Въведение в Python

01. Въведение в Python

01. Въведение в Python

2 март 2016

Python

Обаче първо

Което ще рече

Въпросите, които очакваме

Предизвикателство

Днес ще имате предизвикателство, за което ще имате срок от два дена

Би трябвало да не ви отнеме повече от час-два

Къде отива кода?

Python е предсказуем

Когато не сте сигурни, просто пробвайте.

$ python
Python 3.5.1 (default, Dec  7 2015, 12:58:09)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 13 + 10
23
>>> a = 13
>>> b = a + 10
>>> print(b)
23
>>> a * 2
26
>>> a ** 2
169
>>> "hello" + ', ' + "world"
'hello, world'

Първа помощ

В интерактивната конзола, help() показва документацията на всяка функция, клас или тип.

>>> help(str)
>>> help(5)
>>> help(SomeClass)
>>> help(some_function)

Един ред код

>>> my_var = 'spam'.upper()
>>> print(my_var)
SPAM

Типове: int

Типове: float

Типове: complex

Типове: complex

>>> a = 1j * 1j
(-1+0j)

Типове: str

>>> "hello".upper()
"HELLO"
>>> len("абвгдеж")
7
>>> "hello"[1]
"e"
>>> help(str)

Типове: bool

Типове: None

Типове

Типове

Типове

It's turtles all the way down…

Имена

Можем да присвоим стойност на име, така създаваме променлива

Python е динамичен език, стойностите имат тип, но не и имената

>>> а = 5
>>> type(a)
<class 'int'>
>>> a = 'test'
>>> type(a)
<class 'str'>

Имена в картинки

Структури от данни

Списъци

>>> my_list = [] # препоръчително!
>>> my_list = list() # иначе може и така

Списъци

>>> my_list = []
>>> my_list.append('word')
>>> my_list.append(5)
>>> my_list.append(False)

>>> my_list[1] == 5
True

Списъци

>>> my_other_list = ['foo', 'bar', 'quux']
>>> len(my_other_list)
3
>>> del my_other_list[1]

>>> my_other_list
['foo', 'quux']

>>> 'foo' in my_other_list
True
>>> False in my_list
True
>>> 'spam' in my_list
False

Речник (dict)

>>> ages = {'Кай': 2, 'Бобо': 3}
>>> ages['Стефан'] = 3
>>> ages['Кирил'] = 42
>>> ages['Николай'] = 23

>>> ages['Кирил']
42
>>> 'Николай' in ages
True

>>> ages.get('Стамат')
None
>>> ages.get('Стамат', 'няма такъв')
няма такъв

Речник (dict)

tuple

>>> args = (9.8, 3.14, 2.71)
>>> args[2]
2.71
>>> args[1] = 22/7
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

tuple

Структури от данни: set

>>> unique_numbers = {2, 3, 5, 6}
>>> unique_numbers
{2, 3, 5, 6}
>>> unique_numbers.add(5)
>>> unique_numbers
{2, 3, 5, 6}
>>> unique_numbers.remove(5)
>>> unique_numbers
{2, 3, 6}
>>> my_list = [5, 1, 6, 6, 2, 3, 5, 5]
>>> set(my_list)
{1, 2, 3, 5, 6}

Структури от данни: set

Mutable vs immutable

a = 5
a += 2
a # 7

Mutable vs immutable

a = [1, 2, 3]
a.append(4)
a # [1, 2, 3, 4]

Контролни структури

if

if a == 5:
    print("a is five")
elif a == 3 and not b == 2:
    print("a is three, but b is not two")
else:
    print("a is something else or b is two")

if

с булеви променливи:

a = True
if a:
    print("a is True")

if not a:
    print("a is not True")

истина и лъжа

В контекста на булевите операции като лъжа се интерпретират следните стойности:

Всички останали стойности се интерпретират като истина.

if

тестове за принадлежност:

my_list = [1, 2, 3, 4]

if 1 in my_list:
    print('1 is in my list')

if 5 not in my_list:
    print('5 is not in my list')

Индентация

while

while a > 5:
    a -= 1
    print("a is {}".format(a))

for

primes = [3, 5, 7, 11]
for e in primes:
    print(e ** 2) # 9 25 49 121

people = {'bob': 25, 'john': 22, 'mitt': 56}
for name, age in people.items():
    print("{} is {} years old".format(name, age))
    # bob is 25 years old
    # john is 22 years old
    # ...

for като в C

for i in range(0, 20):
    print(i)
    # 0 1 2 3 4 5 6 .. 19

for i in range(0, 20, 3):
    print(i)
    # 0 3 6 9 12 15 18

Може и наобратно

for i in range(20, 0, -1):
    print(i)
    # 20 19 18 17 16 15 .. 1

for i in range(20, 0, -3):
    print(i)
    # 20 17 14 11 8 5 2

break и continue

switch/case

Няма

Няма и нужда

Функции

def say_hello(name, from):
    return "Hello… It's me…"

Аргументи на функции

def multiply(a, b=2):
    return a * b

multiply(5) # 10
multiply(5, 10) # 50

def is_pythagorean(a=2, b=3, c=4):
    return a * a + b * b == c * c

is_pythagorean(b=5) # a = 2, c = 4
is_pythagorean(1, c=3) # a = 1, b = 3

Променлив брой аргументи

def varfunc(some_arg, *args, **kwargs):
    #...

varfunc('hello', 1, 2, 3, name='Bob', age=12)
    # some_arg == 'hello'
    # args = (1, 2, 3)
    # kwargs = {'name': 'Bob', 'age': 12}

λ

В python функциите са обекти

def baba():
    print('баница')
def call(function, times):
    for _ in range(times):
        function()

λ

Всяка функция може да приема като аргумент обекти от всякакъв тип, включително други функции, вградени типове, наши типове

Въпроси?