Этот материал расчитан на тех, кто уже знаком с программированием и хочет освоить язык программирования Python. Он расчитан на то, чтобы за 10 минут показать вам особенности языка Python, особенности синтаксиса и основные принципы работы с Python на примерах. Здесь нет никакой «воды» — информации, которая не имеет непосредственного отношения к языку программирования. Начнем!
Содержание
Особенности Python
Язык программирования Python отличается сильной типизацией (Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество), используется динамическая типизация — все типы выясняются уже во время выполнения программы.
Объявление переменных необязательно, названия восприимчивы к регистру (var и VAR — две разные переменные).
Язык Python объектно-ориентирован, все в языке является объектом.
Получение справки
Справка (помощь) в Python всегда доступна прямо в интерпретаторе. Если вы хотите знать, как объект работает, вызовите help(<object>).
Также полезной инструкцией является dir()
, которая показывает все методы объекта, и свойство объектов <object>.__doc__
, которая покажет вам строку документации:
>>> help(5)
Help on int object:
(etc etc)
>>> dir(5)
['__abs__', '__add__', ...]
>>> abs.__doc__
'abs(number) -> number
Return the absolute value of the argument.'
Синтаксис языка Python
В Python нет конструкций для завершения блоков (таких как описание класса или функции, например) — блоки определяются с использованием отступов. Увеоичение отступа в начале блока, уменьшение — в конце блока. Инстукции, которые предполагают наличие отступов, завершаются символом двоеточия (:). Если после инструкции начала блока у вас пока нет кода, вставьте оператор pass
для прохождения синтаксической проверки.
while rangelist[1] == 1:
pass
Однострочные комментарии начинаются с символа решетки (#), многострочные используют ("""
) в начале и в конце комментария.
Значения присваиваются с использованием знака равенства («=») (по факту объектам присваиваются имена в процессе).
Проверка на различие выполняется с двумя символами равенства («==»).
Можно увеличить значение с помощью оператора += и уменьшить с -=, указав в левой части переменную, а в правой — значение, на которую произойдет увеличение/уменьшение. Это работает со многими типами данных в Python, включая строки.
Можно присвоить значение неспольким переменным в одной строке. Примеры:
>>> myvar = 3
>>> myvar += 2
>>> myvar
5
>>> myvar -= 1
>>> myvar
4
"""This is a multiline comment.
The following lines concatenate the two strings."""
>>> mystring = "Hello"
>>> mystring += " world."
>>> print mystring
Hello world.
# This swaps the variables in one line(!).
# It doesn't violate strong typing because values aren't
# actually being assigned, but new objects are bound to
# the old names.
>>> myvar, mystring = mystring, myvar
Типы данных в Python
В Python доступны такие типы данных, как списки (lists), кортежи (tuples) и словари (dictionaries). Также доступны множества — с использованием модуля sets
в версиях до Python 2.5 и встроены в язык в более поздних.
Списки похожи на одномерные массивы. При этом можно иметь список, состоящий из других списков.
Словари — это ассоциативные массивы, в которых доступ к данным осуществляется по ключу.
Кортежи — это неизменяемые одномерные массивы.
«Массивы» в Python могут быть любого типа, то есть вы можете совмещать числа, строки и другие типы данных в списках/словарях/кортежах.
Индекс первого элемента — 0. Негативное значение индекса начинает отсчет от последнего к первому, [-1] укажет на последний элемент.
Переменные могут указывать на функции.
Примеры:
>>> sample = [1, ["another", "list"], ("a", "tuple")]
>>> mylist = ["List item 1", 2, 3.14]
>>> mylist[0] = "List item 1 again" # We're changing the item.
>>> mylist[-1] = 3.21 # Here, we refer to the last item.
>>> mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}
>>> mydict["pi"] = 3.15 # This is how you change dictionary values.
>>> mytuple = (1, 2, 3)
>>> myfunction = len
>>> print myfunction(mylist)
3
Вы можете получить срез массива (списка или кортежа) через использование двоеточия (:). Оставляя пустым начальное значение индекса, вы укажете начинать с первого значения, пустое значение конца индекса предполагает последний элемент массива. Негативные индексы считаются с конца массива назад ( -1 — укажет на последний элемент ).
Посмотрите примеры:
>>> mylist = ["List item 1", 2, 3.14]
>>> print mylist[:]
['List item 1', 2, 3.1400000000000001]
>>> print mylist[0:2]
['List item 1', 2]
>>> print mylist[-3:-1]
['List item 1', 2]
>>> print mylist[1:]
[2, 3.14]
# Adding a third parameter, "step" will have Python step in
# N item increments, rather than 1.
# E.g., this will return the first item, then go to the third and
# return that (so, items 0 and 2 in 0-indexing).
>>> print mylist[::2]
['List item 1', 3.14]
Строки в Python
Для обозначения строки может использоваться апостроф (‘) или двойные кавычки (double quote — «). Благодаря этому вы можете иметь кавычки внутри строки, обозначенной с помощью апострофов (например ‘He said «hello».’ — правильная строка).
Многострочные строки обозначаются с использованием тройного апострофа или кавычек ("""
). Python поддерживает юникод из коробки. При этом во второй версии Python для обозначения строки, содержажей unicode, используется символ (u): u»This is a unicode string». В Python3 все строки содержат юникод. Если в Python3 вам нужна последовательность байтов, которой была по сути строка в предыдущих версиях, используется символ (b): b»This is a byte string».
Для подстановки значений параметров в строку используется оператор (%) и кортеж. Каждый %s заменяется на элемент из кортежа, слева направо. Также вы можете использовать словарь для подстановки именованнх параметров:
>>>print "Name: %s\
Number: %s\
String: %s" % (myclass.name, 3, 3 * "-")
Name: Poromenos
Number: 3
String: ---
strString = """This is
a multiline
string."""
# WARNING: Watch out for the trailing s in "%(key)s".
>>> print "This %(verb)s a %(noun)s." % {"noun": "test", "verb": "is"}
This is a test.
Инструкции для контроля потока — if, for, while
Для контроля порядка выполнения программы используются инстукции if
, for
и while
. В Python нет switch
или case
, вместо них используется if
. For
используется для прохождения по элементам списка (или кортежа). Для получения последовательности чисел, используйте range(<number>)
. Для прерывания выполнение цикла используется break
.
Синтаксис этой конструкции следующий:
rangelist = range(10)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in rangelist:
# Check if number is one of
# the numbers in the tuple.
if number in (3, 4, 7, 9):
# "Break" terminates a for without
# executing the "else" clause.
break
else:
# "Continue" starts the next iteration
# of the loop. It's rather useless here,
# as it's the last statement of the loop.
continue
else:
# The "else" clause is optional and is
# executed only if the loop didn't "break".
pass # Do nothing
if rangelist[1] == 2:
print "The second item (lists are 0-based) is 2"
elif rangelist[1] == 3:
print "The second item (lists are 0-based) is 3"
else:
print "Dunno"
while rangelist[1] == 1:
pass
Функции в Python
Функции объявляются с использованием ключевого слова «def». Необязательные аргументы следуют в объявлении функции после обязательных и им назначается значение по-умолчанию. При вызове функции, можно передавать аргументы через указание их имени и значения, при этом пропуская часть необязательных аргументов или располагая их в порядке, отличном от объявленном в функции.
Функции могут возвращать кортеж и используя распаковку кортежа вы можете возвращать несколько значений.
Лямбда-функции (lambda functions) — специальные фукции, обрабатывающие один аргумент.
Параметры передаются через ссылку. Добавляя элементы к переданному списку вы получите обновленный список вне функции. При этом присваивание нового значения параметрам внутри функции останется локальным действием. Поскольку при передаче передается только расположение в памяти, назначение нового объекта параметру как переменной вызовет создание нового объекта.
Примеры кода:
# Same as def funcvar(x): return x + 1
funcvar = lambda x: x + 1
>>> print funcvar(1)
2
# an_int and a_string are optional, they have default values
# if one is not passed (2 and "A default string", respectively).
def passing_example(a_list, an_int=2, a_string="A default string"):
a_list.append("A new item")
an_int = 4
return a_list, an_int, a_string
>>> my_list = [1, 2, 3]
>>> my_int = 10
>>> print passing_example(my_list, my_int)
([1, 2, 3, 'A new item'], 4, "A default string")
>>> my_list
[1, 2, 3, 'A new item']
>>> my_int
10
Классы Python
Python поддерживает ограниченную форму множественного наследования в классах.
Частные переменные и методы могут быть объявлены ( по соглашению, это не проверяется интерпретатором) с использованием двух символов подчеркивания вначале и не более одного в конце имени (напрмер: «__spam»).
Мы также можем назначать произвольные имена экземплярам класса. Просмотрите примеры:
class MyClass(object):
common = 10
def __init__(self):
self.myvariable = 3
def myfunction(self, arg1, arg2):
return self.myvariable
# This is the class instantiation
>>> classinstance = MyClass()
>>> classinstance.myfunction(1, 2)
3
# This variable is shared by all classes.
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Note how we use the class name
# instead of the instance.
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# This will not update the variable on the class,
# instead it will bind a new object to the old
# variable name.
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
# This has not changed, because "common" is
# now an instance variable.
>>> classinstance.common
10
>>> classinstance2.common
50
# This class inherits from MyClass. The example
# class above inherits from "object", which makes
# it what's called a "new-style class".
# Multiple inheritance is declared as:
# class OtherClass(MyClass1, MyClass2, MyClassN)
class OtherClass(MyClass):
# The "self" argument is passed automatically
# and refers to the class instance, so you can set
# instance variables as above, but from inside the class.
def __init__(self, arg1):
self.myvariable = 3
print arg1
>>> classinstance = OtherClass("hello")
hello
>>> classinstance.myfunction(1, 2)
3
# This class doesn't have a .test member, but
# we can add one to the instance anyway. Note
# that this will only be a member of classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10
Исключения в Python
Исключения в Python обрабатываются в блоках try-except [exceptionname]:
def some_function():
try:
# Division by zero raises an exception
10 / 0
except ZeroDivisionError:
print "Oops, invalid."
else:
# Exception didn't occur, we're good.
pass
finally:
# This is executed after the code block is run
# and all exceptions have been handled, even
# if a new exception is raised while handling.
print "We're done with that."
>>> some_function()
Oops, invalid.
We're done with that.
Импорт модулей в Python
Внешние библиотеки используются после импорта с использованием ключевого слова import [libname]
. Вы также можете использовать from [libname] import [funcname]
для импорта индивидуальных функций.
import random
from time import clock
randomint = random.randint(1, 100)
>>> print randomint
64
Работа с файлами в Python
Python обладает большим количеством библиотек для работы с файлами. Например, сериализация (конвертирование данных в строки с библиотекой pickle
):
import pickle
mylist = ["This", "is", 4, 13327]
# Open the file C:\\binary.dat for writing. The letter r before the
# filename string is used to prevent backslash escaping.
myfile = open(r"C:\\binary.dat", "w")
pickle.dump(mylist, myfile)
myfile.close()
myfile = open(r"C:\\text.txt", "w")
myfile.write("This is a sample string")
myfile.close()
myfile = open(r"C:\\text.txt")
>>> print myfile.read()
'This is a sample string'
myfile.close()
# Open the file for reading.
myfile = open(r"C:\\binary.dat")
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
['This', 'is', 4, 13327]
Разное
- Условия могут склеиваться, например
1 < a < 3
проверит, что a одновременно меньше 3 и больше 1. - Вы можете использовать
del
для удаления переменных или элементов в массивах. - Списки дают очень сильные возможности для манипуляции данными. Вы можете составить выражение с использованием
for
и последующими инструкциямиif
илиfor
:
>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print [x * y for x in lst1 for y in lst2]
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print [x for x in lst1 if 4 > x > 1]
[2, 3]
# Check if a condition is true for any items.
# "any" returns true if any item in the list is true.
>>> any([i % 3 for i in [3, 3, 4, 4, 3]])
True
# This is because 4 % 3 = 1, and 1 is true, so any()
# returns True.
# Check for how many items a condition is true.
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 4)
2
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1
- Глобальные переменные объявляются вне функций и могут читаться без специальных объявлений внутри, но если вы хотите записывать их, вы должны объявить из в начале функции с использованием специального ключевого слова «global», иначе Python назначит новое значение локальной переменной:
number = 5
def myfunc():
# This will print 5.
print number
def anotherfunc():
# This raises an exception because the variable has not
# been bound before printing. Python knows that it an
# object will be bound to it later and creates a new, local
# object instead of accessing the global one.
print number
number = 3
def yetanotherfunc():
global number
# This will correctly change the global.
number = 3
Как выучить язык программирования Python
Этот материал не претендует на исчерповающее руководство по Python. Язык программирования Python обладает огромным числом библиотек и различной функциональностью, с которыми вы познакомитесь, продолжив работать с языком и изучая дополнительные источники.
Если вам недостаточно изложенной информации — просмотрите расширенный материал с описанием языка программирования Python — http://itman.in/python-howto/ — в нем сведения о языке изложены более подробно.
Среди других материалов рекомендую Learn Python The Hard Way. И, конечно The Python 2 Tutorial и The Python 3 Tutorial.
Большая благодарность Stavros Korokithakis за его отличный tutorial «Learn Python in 10 minutes».
Если вы хотите что-то улучшить в этом материале — пожалуйста напишите в комментариях.
Python предлагает большие возможности для работы со списками . Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию.
Что-то тут не так ?
Пункт «Работа с файлами»
>>> testfile = open(r’/home/test/testFile.txt’, ‘w’)
>>> mylist = [‘This’, ‘is’, ‘Sparta!’]
>>>
>>> testfile.close()
>>> testfile = open(r’/home/test/testFile.txt’)
>>> test = pickle.load(testfile)
Traceback (most recent call last):
File «», line 1, in
File «/usr/lib/python2.7/pickle.py», line 1378, in load
return Unpickler(file).load()
File «/usr/lib/python2.7/pickle.py», line 858, in load
dispatch[key](self)
File «/usr/lib/python2.7/pickle.py», line 880, in load_eof
raise EOFError
EOFError
>>>
Нврн, лучше делать так:
>>> mylist = [‘This’, ‘is’, ‘Sparta!’]
>>> myfile = open(‘/home/test/testFile.file’, ‘wb’)
>>>
>>> pickle.dump(mylist, myfile)
>>> myfile.close()
>>>
>>> myfile = open(‘/home/test/testFile.file’, ‘rb’)
>>> print(pickle.load(myfile))
[‘This’, ‘is’, ‘Sparta!’]
>>> myfile.close()
Рекомендую курсы программирвоания на python imprium
Анатолий, не понравился мне дизайн сайта с вашими курсами. Поэтому убрал прямую ссылку.
Если я не прав, и содержание хорошее — пришлите мне доступ. Возможно размещу ссылку, если увижу, что хороший материал.
От куда ты столько знаешь
Максим, это всего лишь перевод.
Но если вы интересуетесь Python, возможно это понравится: https://www.youtube.com/watch?v=OSGv2VnC0go
Привет, Сергей!
Отличные статьи. Но вот с листингом беда:
«`
for number in rangelist:
# Check if number is one of
# the numbers in the tuple.
if number in (3, 4, 7, 9):
# «Break» terminates a for without
# executing the «else» clause.
break
else:
# «Continue» starts the next iteration
# of the loop. It’s rather useless here,
# as it’s the last statement of the loop.
continue
else:
# The «else» clause is optional and is
# executed only if the loop didn’t «break».
pass # Do nothing
«`
Посмотри код выше и исправь в статье, если ты конечно заинтересован в качестве страниц на этом сайте.
Благодарю за обратную связь! :)
А что не так с кодом? Вроде нормально всё, c отступами. Вставил в интерпретатор Python — тоже без проблем. Просто он ничего не делает, но так и задумано — это же просто пример синтаксиса Python.