Kodomo

Пользователь

Занятие 5. Документация.

Разбор контрольной работы.

1) Можно длинно и мерзко:

   1 def enumerate(list)
   2         i=0
   3         result=[]
   4         for x in list:
   5                 result.append((i,x))
   6                 i=i+1
   7         return result

А можно коротко:

   1 def enumerate(list):
   2         return zip(range(len(list)),list)

2) В лоб:

   1 def pair_sums(list)
   2         result=[]
   3         prev=list[0]
   4         for x in list[1:]
   5                 result.append(prev+x)
   6                 prev=x
   7         return result

Другой вариант:

   1 def pair_sums(list)
   2         result=[]
   3         for a,b in zip(list,list[1:])
   4                 result.append(a+b)
   5         return result

Разбор предыдущей к/р

1) Скалярное произведение:

   1 def dot_product(a,b):
   2         return a.x*b.x+a.y*b.y

2)

   1 >>> def f(b,a)
   2                 return a-b
   3                 return a+b
   4 >>> a=8
   5 >>> b=50
   6 >>> f(a,b)
   7  42

Документация.

Разделение строк.

В приличном обществе не пишут строчки длинее 80!

Для разделения 1 строки на несколько в коде:

  1. Явный способ (с помощью скобок)
    • - если в строке встречаются непарные открывающиеся скобки, то Питон считает, что строка будет продолжена до тех пор, пока в следующих строках не встретиться соответствующие закрывающиеся скобки.
         1         return (1,
         2                    2,
         3                    3,
         4                    4,
         5                    )
      
      Такая запись вернет кортеж (1,2,3,4).
  2. Неявный (с помощью слэшей)

Равнозначно записи выше можно записать:

   1 return 1, \
   2     2, \
   3     3, \
   4     4

Предпочтительней использовать первый способ.

Для пробелов (имеются ввиду пустые строки) существуют следующие правила хорошего тона:

statement и expression

В Python, как и в подавляющем числе языков программирования есть две категории конструкции,

Expression - это просто выражение. Примеры выражений в Python:

a+b
a-b
(a+b)/5**1000
abs(a)
a==b
a<b<c
a<v and b<c
2
"a"
[a,b]

Statement (~оператор) - это одна команда языка Python. Примеры:

a=<expression> #присваивание
return <expression>
print <expression> # в текущей версии Python - оператор, однако в следующей это будет функция
import

Существуют составные операторы:

def имя(аргумент)
        statement
        statement
class
Условие if
Циклы while и for
Также оператором является просто:
<expression> 

Python посчитает его выражение и забудет результат. Это используется, например, для вызова функции, которая ничего не возвращает, а просто выполняет какое-то действие.

   1 def hello(world):
   2         "Greet someone named world"
   3         print "Hello, %!"%(world)
   4         "This is junk"

"Greet someone named world" является описанием функции hello. Если мы напишем help(hello), то Python вернет "Greet someone ...".

Все что в кавычках возникает в памяти Python и моментально забывается!

Описание пишется только в начале! Поэтому "This is junk" не является описанием!

Если пишем большой хэлп:

'''Краткое описание.

полное описание
'''

Описание для классов аналогично описанию для функций:

class Vector(object)
    "2D vectors"

аналогично и для модулей!
Описание модуля Astro: "Tools to build model of solar systems"

Чтобы обратиться к описанию:

   1 import astro
   2 help(astro)

Кстати! По правилам хорошего тона, все импорты пишутся сначала!

   1 class Vector(object)
   2    '''2D vectors.
   3 
   4       Example use
   5       >>> a=Vector(3,4)
   6       >>> b=Vector(1,1)
   7       >>> a-b
   8       Vector(2,3)
   9       >>> abs(a)
  10       5
  11    '''

Можно проверить, правда ли написана в этом примере. Для этого надо:

import doctest
doctest.testmod()

Единственное, если после диалога идет текст, то надо поставить пустую строку, чтобы их разделить.