Основы языка программирования Python за 10 минут
Автор оригинала: Poromenos' Stuff
На сайте Poromenos' Stuff была
опубликована статья , в которой, в сжатой форме,
рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.
Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
статья вам очень пригодится! За короткое время, вы сможете познакомиться с
основами языка Python. Хотя эта статья часто опирается
на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
необходимый метриал.
Основные свойства
Python не требует явного объявления переменных, является регистро-зависим (переменная var не эквивалентна переменной Var или VAR — это три разные переменные) объектно-ориентированным языком.
Синтаксис
Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого блоки выделяются отступами: пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные — начинаются и заканчиваются тремя двойными кавычками «"""».
Чтобы присвоить значение пременной используется знак «=», а для сравнения —
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения — «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например
>>> myvar = 3
>>> myvar += 2
>>> myvar -= 1
""«Это многострочный комментарий
Строки заключенные в три двойные кавычки игнорируются»""
>>> mystring = «Hello»
>>> mystring += " world."
>>> print mystring
Hello world.
# Следующая строка меняет
значения переменных местами. (Всего одна строка!)
>>> myvar, mystring = mystring, myvar
Структуры данных
Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries). Списки — похожи на одномерные массивы (но вы можете использовать Список включающий списки — многомерный массив), кортежи — неизменяемые списки, словари — тоже списки, но индексы могут быть любого типа, а не только числовыми. "Массивы" в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных. Массивы начинаются с индекса 0, а последний элемент можно получить по индексу -1 Вы можете присваивать переменным функции и использовать их соответственно.
>>> sample = [1, [«another», «list»], («a», «tuple»)] #Список состоит из целого числа, другого списка и кортежа
>>> mylist = [«List item 1», 2, 3.14] #Этот список содержит строку, целое и дробное число
>>> mylist[0] = «List item 1 again» #Изменяем первый (нулевой) элемент листа mylist
>>> mylist[-1] = 3.14 #Изменяем последний элемент листа
>>> mydict = {«Key 1»: «Value 1», 2: 3, «pi»: 3.14} #Создаем словарь, с числовыми и целочисленным индексами
>>> mydict[«pi»] = 3.15 #Изменяем элемент словаря под индексом «pi».
>>> mytuple = (1, 2, 3) #Задаем кортеж
>>> myfunction = len #Python позволяет таким образом объявлять синонимы функции
>>> print myfunction(list)
3
Вы можете использовать часть массива, задавая первый и последний индекс через двоеточие «:». В таком случае вы получите часть массива, от первого индекса до второго не включительно. Если не указан первый элемент, то отсчет начинается с начала массива, а если не указан последний — то масив считывается до последнего элемента. Отрицательные значения определяют положение элемента с конца. Например:
>>> 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] #Считываются элементы от нулевого (-3) до второго (-1) (не включительно)
['List item 1', 2]
>>> print mylist[1:] #Считываются элементы от первого, до последнего
[2, 3.14]
Строки
Строки в Python обособляются кавычками двойными «"» или одинарными «'». Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал 'привет'!» будет выведена на экран как «Он сказал 'привет'!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «"""». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.
>>>print «Name: %s\nNumber: %s\nString: %s» % (myclass.name, 3, 3 * "-")
Name: Poromenos
Number: 3
String: —
strString = ""«Этот текст расположен
на нескольких строках»""
>>> print «This %(verb)s a %(noun)s.» % {«noun»: «test», «verb»: «is»}
This is a test.
Операторы
Операторы while, if, for составляют операторы перемещения. Здесь нет аналога оператора select, так что придется обходиться if. В операторе for происходит сравнение переменной и списка. Чтобы получить список цифр до числа <number> — используйте функцию range(<number>). Вот пример использования операторов
rangelist = range(10) #Получаем список из десяти цифр (от 0 до 9)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in rangelist: #Пока переменная number (которая каждый раз увеличивается на единицу) входит в список…
# Проверяем входит ли переменная
# numbers в кортеж чисел (3, 4, 7, 9)
if number in (3, 4, 7, 9): #Если переменная number входит в кортеж (3, 4, 7, 9)...
# Операция «break» обеспечивает
# выход из цикла в любой момент
break
else:
# «continue» осуществляет «прокрутку»
# цикла. Здесь это не требуется, так как после этой операции
# в любом случае программа переходит опять к обработке цикла
continue
else:
# «else» указывать необязательно. Условие выполняется
# если цикл не был прерван при помощи «break».
pass # Ничего не делать
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
Функции
Для объявления функции служит ключевое слово «def». Аргументы функции задаются в скобках после названия функции. Можно задавать необязательные аргументы, присваивая им значение по умолчанию. Функции могут возвращать кортежи, в таком случае надо писать возвращаемые значения через запятую. Ключевое слово «lambda» служит для объявления элементарных функций .
# arg2 и arg3 — необязательые аргументы, принимают значение объявленное по умолчни,
# если не задать им другое значение при вызове функци.
def myfunction(arg1, arg2 = 100, arg3 = «test»):
return arg3, arg2, arg1
#Функция вызывается со значением первого аргумента — "Argument 1", второго — по умолчанию, и третьего — "Named argument".
>>>ret1, ret2, ret3 = myfunction(«Argument 1», arg3 = «Named argument»)
# ret1, ret2 и ret3 принимают значения "Named argument", 100, "Argument 1" соответственно
>>> print ret1, ret2, ret3
Named argument 100 Argument 1
# Следующая запись эквивалентна def f(x): return x + 1
functionvar = lambda x: x + 1
>>> print functionvar(1)
2
Классы
Язык Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Мы можем также присвоить значение переменной класса извне. Пример:
class Myclass:
common = 10
def __init__(self):
self.myvariable = 3
def myfunction(self, arg1, arg2):
return self.myvariable
# Здесь мы объявили класс Myclass. Функция __init__ вызывается автоматически при инициализации классов.
>>> classinstance = Myclass() # Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации
>>> classinstance.myfunction(1, 2) #Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
>>> classinstance2 = Myclass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Поэтому, если мы изменим ее значение в классе Myclass изменятся
# и ее значения в объектах, инициализированных классом Myclass
>>> Myclass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# А здесь мы не изменяем переменную класса. Вместо этого
# мы объявляем оную в объекте и присваиваем ей новое значение
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> Myclass.common = 50
# Теперь изменение переменной класса не коснется
# переменных объектов этого класса
>>> classinstance.common
10
>>> classinstance2.common
50
# Следующий класс является наследником класса Myclass
# наследуя его свойства и методы, ктому же класс может
# наследоваться из нескольких классов, в этом случае запись
# такая: class Otherclass(Myclass1, Myclass2, MyclassN)
class Otherclass(Myclass):
def __init__(self, arg1):
self.myvariable = 3
print arg1
>>> classinstance = Otherclass(«hello»)
hello
>>> classinstance.myfunction(1, 2)
3
# Этот класс не имеет совйтсва test, но мы можем
# объявить такую переменную для объекта. Причем
# tэта переменная будет членом только classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10
Исключения
Исключения в Python имеют структуру try-except [exceptionname]:
def somefunction():
try:
# Деление на ноль вызывает ошибку
10 / 0
except ZeroDivisionError:
# Но программа не "Выполняет недопустимую операцию"
# А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
print «Oops, invalid.»
>>> fnexcept()
Oops, invalid.
Импорт
Внешние библиотеки можно подключить процедурой «import [libname]», где [libname] — название подключаемой библиотеки. Вы так же можете использовать команду «from [libname] import [funcname]», чтобы вы могли использовать функцию [funcname] из библиотеки [libname]
import random #Импортируем библиотеку «random»
from time import clock #И заодно функцию «clock» из библиотеки «time»
randomint = random.randint(1, 100)
>>> print randomint
64
Работа с файловой системой
Python имеет много встроенных библиотек. В этом примере мы попробуем сохранить в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных мы будем использовать стандартную библиотеку «pickle»
import pickle
mylist = [«This», «is», 4, 13327]
# Откроем файл C:\binary.dat для записи. Символ «r»
# предотвращает замену специальных сиволов (таких как \n, \t, \b и др.).
myfile = file(r«C:\binary.dat», «w»)
pickle.dump(mylist, myfile)
myfile.close()
myfile = file(r«C:\text.txt», «w»)
myfile.write(«This is a sample string»)
myfile.close()
myfile = file(r«C:\text.txt»)
>>> print myfile.read()
'This is a sample string'
myfile.close()
# Открываем файл для чтения
myfile = file(r«C:\binary.dat»)
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
['This', 'is', 4, 13327]
Особенности
- Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
- Используйте операцию «del» чтобы очищать переменные или элементы массива.
- Python предлагает большие возможности для работы со списками. Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию.
>>> 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]
# Оператор «any» возвращает true, если хотя
# бы одно из условий, входящих в него, выполняется.
>>> any(i % 3 for i in [3, 3, 4, 4, 3])
True
# Следующая процедура подсчитывает количество
# подходящих элементов в списке
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 3)
3
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1
- Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global», если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.
number = 5
def myfunc():
# Выводит 5
print number
def anotherfunc():
# Это вызывает исключение, поскольку глобальная апеременная
# не была вызванна из функции. Python в этом случае создает
# одноименную переменную внутри этой функции и доступную
# только для операторов этой функции.
print number
number = 3
def yetanotherfunc():
global number
# И только из этой функции значение переменной изменяется.
number = 3
Эпилог
Разумеется в этой статье не описываются все возможности Python. Я надеюсь что эта статья поможет вам, если вы захотите и в дальнейшем изучать этот язык программирования.
Преимущества Python
- Скорость выполнения программ написанных на Python очень высока. Это связанно с тем, что основные библиотеки Python
написаны на C++ и выполнение задач занимает меньше времени, чем на других языках высокого уровня.
- В связи с этим вы можете писать свои собственные модули для Python на C или C++
- В стандартныx библиотеках Python вы можете найти средства для работы с электронной почтой, протоколами
Интернета, FTP, HTTP, базами данных, и пр.
- Скрипты, написанные при помощи Python выполняются на большинстве современных ОС. Такая переносимость обеспечивает Python применение в самых различных областях.
- Python подходит для любых решений в области программирования, будь то офисные программы, вэб-приложения, GUI-приложения и т.д.
- Над разработкой Python трудились тысячи энтузиастов со всего мира. Поддержкой современных технологий в стандартных библиотеках мы можем быть обязаны именно тому, что Python был открыт для всех желающих.
Теги:
- Python
- программирование
- урок
Хабы:
Реклама
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
+44
45,8
Карма
0,0
Рейтинг
Michael_P
Пользователь
Похожие публикации
- 21 октября 2019 в 18:46
Python 3.8: Что нового и как этим пользоваться?
+30 59,9k 129 68
- 4 сентября 2019 в 13:10
Книга «Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию»
+10 19,6k 143 3
- 18 июня 2019 в 18:03
Полезные инструменты Python
+38 25,1k 291 38
Заказы
- Настройка виртуальной АТС, разработка CRM для колл-центра и программир
3 000 за проект 0 откликов 13 просмотров
- Разработать корпоративное web приложение
100 000 за проект 29 откликов 128 просмотров
- Решить капчу через антикапчу, используя selenium python
500 за проект 9 откликов 66 просмотров
- Настроить модуль почтового сервиса Dovecot
10 000 за проект 8 откликов 43 просмотра
- Помочь запустить проект на python
6 000 за проект 16 откликов 108 просмотров
Больше заказов на Хабр Фрилансе
Реклама
Минуточку внимания
Мегапост
Как соединить 24 миллиарда устройств в рабочую сеть?
Комментарии 163
- lautsevich 26 июля 2007 в 12:55
+2
спасибо!
- Michael_P 26 июля 2007 в 12:56
+1
TDionis 26 июля 2007 в 14:08
0
Большое спасибо за перевод! Хоть и вряд ли буду на нем писать, но язык очень интересный. Прямо получил удовольствие от изучения =)
- Michael_P 26 июля 2007 в 14:11
+1
- Я тоже получил удовольствие от перевода. Вот как все здорово!
sinkro 26 июля 2007 в 14:40
0
Хоть коротенькое описание основных преимуществ языка бы было..
- Michael_P 26 июля 2007 в 15:04
0
Пожалуйста!
- sinkro 26 июля 2007 в 18:38
0
- Спасибо )
Я слышал, он еще архитектурно более удобен для работы с большим количеством сложно взаимосвязанных объектов ..
Wellick 26 июля 2007 в 15:10
0
"Скорость выполнения программ написанных на Python очень высока."
В сравнении с чем? :)
И еще у Вас, кажется, пункты 2 и 3 в списке преимуществ перепутаны местами.
Еще, я бы "list comprehension" перевел бы как "охват списков".
А вообще хорошая статья и хороший перевод.
- Michael_P 26 июля 2007 в 15:11
0
Да, вы правы. Исправил.
alrond 26 июля 2007 в 16:14
0
по сравнению с ruby и php ;)
- WhiteBlackGoose 26 сентября 2019 в 11:34
0
EvilShadow 26 июля 2007 в 16:40
0
> по сравнению с ruby и php
Более того, по сравнению с перлом. По крайней мере, я наблюдал такое у себя, на самописных идентичных скриптах на питоне и перле. Холивары по этому поводу прошу не устраивать, сам перл люблю. Но тем не менее... :)
- Wellick 26 июля 2007 в 16:43
0
Я с Вами согласен, но не худо было бы что-то подобное указать в статье :) Поэтому я вопрос и задал.
- EvilShadow 26 июля 2007 в 16:47
0
Думается мне, перл с питоном сравнивать почти так же опасно, как макос с линухом, будут войны многостраничные ;)
- Wellick 26 июля 2007 в 16:51
+3
Да ладно, все уже давно сравнили до нас: http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=python&lang2=perl
:)
- maserg 29 ноября 2007 в 05:42
0
- что за бред? в приведенной выше сцылке питон слин почти всем...
113 Perl 1,651.96 1,884 1134
140 Icon 2,042.74 1,228 1271
147 Python 2,144.89 2,424 1056
163 PHP 2,381.86 5,636 1273
develop7 26 июля 2007 в 16:09
0
Огромное спасибо за замечательную работу!
develop7 26 июля 2007 в 16:16
0
Исключеия -> Исключения
qik 26 июля 2007 в 16:26
+1
"Python требует не требует явного объявления переменных"
что бы это значило?...
- Michael_P 26 июля 2007 в 16:29
0
Например в паскале необходимо перед использованием объявлять переменную в блоке описания переменных. А здесь нет.
- qik 26 июля 2007 в 17:32
0
blinnn.... "требует не требует" chto znachit?
- Michael_P 26 июля 2007 в 17:37
0
Это значит что ошибки не возникнет.
- qik 26 июля 2007 в 17:55
+2
значит чего-то я в жизни не понимаю.
НЛО прилетело и опубликовало эту надпись здесь
- Michael_P 26 июля 2007 в 18:31
0
- Минус влепил не я, но я наконец понял в чем дело. Сам не заметил опечатку. Испраил!
cityhawk 26 июля 2007 в 16:29
+1
Кажется лучшее введение в этот язык:
Magnus Lie Hetland «Мгновенный Python»
http://www.fortunecity.com/skyscraper/motorola/668/rus/koi/python/belanov/instpy-r.html
- Michael_P 26 июля 2007 в 16:30
0
Мне кажется материал почти в два раза больше.
- Michael_P 26 июля 2007 в 16:31
0
Но статья действительно, хорошая. А эта статья с упором на то, чтобы рассказать о Python кратко.
- cityhawk 26 июля 2007 в 16:43
0
- Это у вас получилось, и надо сказать, неплохо... В букмарки однозначно, а то часто спрашивают: «Что бы почитать для начала»
a lexzzam 21 мая 2008 в 02:35
+1
- Там уже нет.
Есть на сайте автора, тут: http://hetland.org/writing/instant-python.html
urandom 26 июля 2007 в 16:35
0
Исправьте в тексте "картеж" на "кортеж" =)
- cloud 27 июля 2007 в 11:56
0
- Какой картеж, подумала Алиса (с) :)
develop7 26 июля 2007 в 16:45
0
И "к о ртеж" все-таки
- Michael_P 26 июля 2007 в 16:46
0
Да. Я уже все исправил.
- Michael_P 26 июля 2007 в 16:47
0
Michael_P 26 июля 2007 в 16:47
0
urandom 26 июля 2007 в 16:48
0
Статья понравилась, так коротко и в то же время полно наверное нигде не видел. Про исключения можно добавить, что в Питоне есть конструкции try-except-finally (начиная с 2.5).
skfd 26 июля 2007 в 17:17
0
"Вы можете шаблон строки и подставить в него элементы из кортежа или словаря." как-то неправильно звучит )
gorinich 26 июля 2007 в 18:00
–3
Очень много грамматических ошибок, читать не приятно :(
По языку. Не нравится он мне :) Ни капли не жалею, что не стал его изучать :)
Что именно не нравится:
Блоки - их просто не видно. Понадобится редактор, который подсвечивает весь блок, от такого глаза быстро устанут.
Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.
Очень понравились условные операторы.
Преимущества языка какие-то просто громко сказанные. Никогда не поверю, что Python удобнее Perl, и тем более богаче :) Может быть где-то быстрее, но в сегодняшнем мире программирования скорость не главное :) Современные технологии основанные на XML и XSL на производительность просто забивают, так что скорость тут не аргумент. Хотя все зависит от поставленной задачи :)
В связи с этим вы можете писать свои собственные модули для Python на C или C++
Ну это просто смешно. Сами подумайте, много ли вы писали модулей для PHP? Для Python напишите ровно столько же ;) Модули должны писаться на том же языке! Для Perl, например, можно писать модули на Perl (и таких большинство) и на Си (для самых требовательных задач), причем используются они одинаково с точки зрения интерфейса.
В итоге мне понравились только условные операторы.
Все сказанное сугубо IMHO.
- Michael_P 26 июля 2007 в 18:15
0
Во первых прошу прощения за грамматические ошибки. Постарался все проверить, но видимо проверил не все… А теперь по порядку:
1. Не буду спорить с вами о предпочтениях.
2. Я объяснил так, потому что так понятно. Если мы используем list[0:2], то на выходе мы получим значения list[0], list[1], list[2]. Вот так, а [2] мы уже не получаем. По моему написанно вполне доступно.
3. а) Каждый выбирает то что ему удобнее.
б) «Хотя все зависит от поставленной задачи» — вот именно! Для одной поставленной задачи может 2-3 мкс не важны, но в другой эти мкс могут вылиться в что-то большее.
в) Я говорю что вы можете писать модули для Python. А вот кому это надо — другой вопрос. Возможно просто вы с ними не знакомы.
4. Я рад, что вам понравились условные операторы.
- gorinich 26 июля 2007 в 18:36
0
1. Последняя строчка в моем посте должна была исключить это Ваше замечание ;) IMHO есть IMHO.
2. Написано доступно, претензия не Вам, а языку. Конструкция не очевидна.
tven 27 июля 2007 в 12:09
0
На самом деле, как мне кажется, для бо́льшей простоты понимания конструкцию list[0:2] можно описать как «взять два элемента списка начиная с нулевого»; в этом случае срез как раз берёт элементы с нулевого по второй исключая элемент с индексом 2.
- Michael_P 27 июля 2007 в 13:33
0
А как нсчет конструкции List[5:7]? По моему как раз выражение «невключительно» описывает большинство ситуаций.
- tven 27 июля 2007 в 13:45
0
- Логично. Я этот момент как-то упустил из виду.
EvilShadow 26 июля 2007 в 18:24
0
> Блоки - их просто не видно. Понадобится редактор, который подсвечивает весь блок, от такого глаза быстро устанут.
Если код слеплен так, что отступ блока на пробел больше, чем предыдущего, это не беда языка, это диагноз программиста. При стандартных табовых отступах с размером таба в 4 пробела, как рекомендуется, блоки чудесно видно.
> Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать?
Считайте, что второе значение - это не индекс, а размер среза. Т.е. в указанном list[0:2] мы имеем дело со срезом, начинающимся с элемента с индексом 0 и содержащего в себе 2 элемента - нулевой и первый. Что здесь не так?
- gorinich 26 июля 2007 в 18:33
0
Сами хоть поняли что сказали?
1) Не важно какой отступ, хоть в 10 пробелов, блок все равно явно не выделен. Если между блоками нет пустой строки, они сливаются. Кстати, стандартный "табовый" отступ - 8 пробелов ;)
2) Пример list[5:6] полностью опровергает ваше высказывание и возвращает только элемент list[5]. Если хотите, можете считать, что второе значение это размер среза, на здоровье ;)
- EvilShadow 26 июля 2007 в 18:44
0
Сам понял. В отличие от многих других, я часто понимаю, что говорю.
1. А ставить пустую строку в Питоне Вам религия не позволяет? Насчет стандарта - если не секрет, где Вы его взяли? Я считаю стандартом рекомендации автора языка. А Вы?
2. Спасибо Вам огромное, буду считать не здоровье. Тем не менее, я не услышал ответа на вопрос, что не так в подобной записи. Вы считаете, что "не включительно" не имеет право на существование только потому, что не нравится лично Вам?
- gorinich 26 июля 2007 в 19:00
0
1. Я не использую Питон, т.к. он меня полностью не устраивает.
Насчет стандарта. Здесь ищем высказывание Если разметка не задана, то по умолчанию применяется значение -8 - "стандарт" табуляций системы UNIX
Из 2 явно следует, что Вы не понимаете о чем говорите. Вы не правы и не признаете этого.
Я считаю, что "не включительно" в данном контексте просто не интуитивно.
Если я хочу получить элементы с 5 по 7, мне понятнее будет написать list[5:7], а не list[5:8]. Язык должен читаться.
- Michael_P 26 июля 2007 в 19:06
0
НАсчет п.2 я с вами согласен. Под записью [5:7] я бы тоже понимал от 5 до семи включительно. Поэтому и уделил внимание записи невключительно. Подумал что это вам и не понравилось.
Wellick 26 июля 2007 в 19:10
0
А Вас не смущает, что для обращения к первому элементу массива в большинстве языков надо написать что-то вроде arr[0]?
- gorinich 26 июля 2007 в 19:18
0
Обсуждаемая проблема меня больше смущает.
С нуля в мире компьютеров считается практически все еще с момента их (компьютеров) зарождения. Так что этот момент никого смущать не должен.
- Wellick 26 июля 2007 в 19:42
0
Ну так отсчеты массива с нуля и особенности механизма срезов в питоне - одного поля ягоды.
В общем, мне кажется, что я спорю о вкусе устриц с тем, кто их не ел.
- gorinich 26 июля 2007 в 19:56
0
Насчет устриц.
Мне кажется, что Вы кроме них ничего не ели ;)
- Wellick 26 июля 2007 в 20:20
0
А Вам почему так кажется?
Мне, например, потому что судя по Вашим комментариям в этом топике, вы не написали и десятка строк кода на Питоне, но при этом ничтоже сумняшеся критикуете его, рассказываете, что не удобно и что плохо сделано.
- gorinich 26 июля 2007 в 21:06
0
Да, не писал. Не пользовался.
И не буду пользоваться. Почему? Да потому что синтаксис языка изначально не позволяет мне оформлять код так, как мне нравится. У меня нет свободы, а ее очень люблю.
Потом про срезы. Такой формат просто неочевиден. Это самое запутывающее, что я только встречал.
И потом, в конце моего поста русским по белому написано IMHO! И это самое IMHO ни в коем случае не должно совпадать ни с Вашим, ни с чьим-либо другим.
P.S. Я с Вами общаюсь на русском языке, и всякие вставки типа "ничтоже сумняшеся" есть элементарное неуважение.
- Wellick 26 июля 2007 в 21:12
0
IMHO - это не белый билет. Если вы выносите своё мнение на общий вид, то будьте готовы, что оно столкнется с другим таким же IMHO. Например, с моим.
P.S. Вы мне только что буквально вынесли мозг. Чем Вам не нравится выражение "ничтоже сумняжеся"? Это абсолютно нормальное русское крылатое выражение .
- gorinich 26 июля 2007 в 21:30
0
Извините за крылатое выражение, не знал. Очень похоже на украинский язык.
- EvilShadow 26 июля 2007 в 22:12
0
- Какая досада, всю жизнь в Украине прожил, но ни разу не приходило в голову, что это украинский язык. Впрочем, судя по "могущему" русскому, Вы чувствуете себя вполне свободно в суждениях о том, чего не знаете.
EvilShadow 26 июля 2007 в 19:30
–1
1. Насчет стандарта. Повторяю еще раз: автором языка рекомендован размер таба в 4 пробела. Что касается tabs:
man tabs
The following options shall be supported:
-n Specify repetitive tab stops separated by a uniform number of column positions, n, where n is a single-digit decimal number. The default usage of tabs with no arguments shall be equivalent to tabs-8.
Как видите, ничего и близко похожего на "Особое значение имеет разметка -8: для системы UNIX она является стандартной" из Вашего документа. Откровенно говоря, это больше похоже на домыслы переводчика. Если уж пользуемся документацией, давайте ссылаться на ОРИГИНАЛЫ, а не на не очень удачные переводы.
По поводу того, что Питон Вы не используете. ВЫ заявили, что в Питоне блоки сливаются потому, что между блоками нельзя поставить пустую строку. Когда Вам указали, что пустую строку поставить можно, ВЫ же заявили, что это значения не имеет, потому что Питон Вы не используете. Ловкий ход, что тут скажешь.
Из 2 не следует ровным счетом ничего. Я НЕ говорил, что второй индекс - это размер среза. Я сказал, что для КОНКРЕТНОГО приведенного Вами примера его можно трактовать так. Вы же заявили, что "не включительно" - это однозначно плохо. Только после долгой дискуссии Вы сказали, что Вы так считаете. Если бы так было сказано изначально, спора по этому поводу и не возникло бы.
- gorinich 26 июля 2007 в 19:55
0
The default usage of tabs with no arguments shall be equivalent to tabs-8
Вами же и написано ;)
Всем известно, что значение по умолчанию - скорее всего стандартное.
Остальной текст вы выдумали.
Доказательства:
http://michael-p.habrahabr.ru/blog/21477… - тут нигде не сказано о том, что нельзя поставить пустую строку :)
http://michael-p.habrahabr.ru/blog/21477… - Вы говорите что "второе значение - это не индекс, а размер среза". А потом даете описание (именно описание) конкретного (именно конкретного) примера в Вашем неправильном трактовании.
Вы мне приписываете слова, которых я не говорил - вот что "однозначно плохо".
- EvilShadow 26 июля 2007 в 20:09
+1
Написано о значении по умолчанию для отдельной программы. Почему Вы пытаетесь представить это как стандарт для написания кода?
> http://michael-p.habrahabr.ru/blog/21477 … - тут нигде не сказано о том, что нельзя поставить пустую строку
Ваши слова:
1. Блоки - их просто не видно
2. Не важно какой отступ, хоть в 10 пробелов, блок все равно явно не выделен. Если между блоками нет пустой строки, они сливаются
Здесь русским языком сказано, что блоки не видно потому, что между ними нет пустой строки. Получается, что минус языка состоит в том, что Вы не желаете ставить между блоками пустую строку. Как ни крути, такой логики я не понимаю.
> Вы говорите что "второе значение - это не индекс, а размер среза". А потом даете описание (именно описание) конкретного (именно конкретного) примера в Вашем неправильном трактовании.
Ну если в качестве аргументов начал приводиться порядок слов, то тут спорить уже не о чем.
> Вы мне приписываете слова, которых я не говорил.
Чушь. Большая часть Ваших реплик бездоказательна. Приведите мне ЦИТАТЫ того, что я "выдумал" или "приписал" Вам.
- gorinich 26 июля 2007 в 20:57
0
Спорить с Вами нет смысла :)
Про значение для отдельной программы. Табуляция в 8 символов изначально стандартна для UNIX. 4 пробела просто удобнее и практически все используют. 4 симфола де-факто, 8 де-юре.
Насчет порядка слов. Мы общаемся на русском языке, а в нем очень многое зависит именно от порядка слов. Именно за счет этого он великий и могущий. Так что прежде чем что-то написать, подумайте как это поймут другие.
Насчет приписывания. "ВЫ заявили, что в Питоне блоки сливаются потому, что между блоками нельзя поставить пустую строку" - Ваши слова. Я такого не заявлял. Это нигде не написано! Если Вы не можете по человечески интерпретировать написанное - это Ваша проблема.
"Вы же заявили, что "не включительно" - это однозначно плохо." Уж извините, но такого я точно не заявлял. Это Вы придумали.
Продолжать разговор не имеет смысла.
- EvilShadow 26 июля 2007 в 22:09
0
Смысла не имеет, это точно. Но одна поправка насчет языка. Он-то, конечно, великий. Но вот только не МОГУЩИЙ, а МОГУЧИЙ. Может быть, стоит овладеть языком, прежде чем рассказывать, как им пользоваться?
- gorinich 26 июля 2007 в 22:23
0
Опечатка есть опечатка.
"Спасибо Вам огромное, буду считать не здоровье" тоже многого стоит в таком случае. А вот порядок слов, и, тем более, правильность речи, это куда более качественный показатель.
- EvilShadow 26 июля 2007 в 22:25
0
- Разумеется. Будем полагать, что я поверил в такую опечатку.
Wellick 26 июля 2007 в 18:53
+1
1. Я не могу себе представить, какой же нужно использовать шрифт, редактор и монитор, чтобы блоки с отступами в 4 символа сливались. В статье есть примеры с форматированием. Вы действительно считаете, что этот код плохо читаем?
2. неправильно выразился. Разница между первым и вторым элементом в срезе - это количество элементов. Восприятие такой конструкции - вопрос привычки, на мой взгляд. Зато очень удобно: list[2:] (с 2 и до конца), list[:2] (с 0 до 2), варианты с переворачиванием списка через отрицательные срезы и т.п.
Мне кажется, что Вы как-то очень поверхностно ознакомились с языком и стали делать далеко идущие выводы.
Хотя, если не нравится, то не нравится.
Goodrone 27 июля 2007 в 01:15
+1
пишет gorinich :
Кстати, стандартный "табовый" отступ - 8 пробелов ;)
Python – ни разу не UNIX. Стандарт для Python – PEP , а в PEP 8 говорится:
Use 4 spaces per indentation level.
gorinich :
Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.
C++ standard library относительно итераторов гласит в книге «The C++ Standard Library. A Tutorial and Reference»:
…begin() and end() define a half-open range that includes the first element but excludes the last…
Я не имею ничего личного, не ставлю Вам минусы в комменты и карму за откровенный бред просто не хочется, чтобы кто-то составил не до конца объективное представление о языке.
- gorinich 27 июля 2007 в 09:11
0
Заметьте, кроме Вас никто не привел более менее обоснованных аргументов, а устроили здесь непонятно что.
Фанатизм по языку не должен быть настолько слепым, чтобы нисколько не задумываться над той или иной особенностью. У нас не как у всех!
Заметьте, я просто высказал свое мнение, я никому его не навязывал. И что я получил в ответ? Мое мнение не опровергли, а обосрали (извините за выражение).
Кстати PEP (Python Enhancement Proposals) - это не стандарт, а всего лишь рекомендации. Если мне рекомендуют длину строки кода делать не более 79 символов, это еще не значит, что мне нельзя делать строки на всю ширину моего экрана.
Насчет итераторов. Думаю не самый лучший аргумент. Си - язык куда более низкого уровня. Или я ошибаюсь? Исправьте пожалуйста, мне не нужны ошибочные знания. Потом, итераторы, если не ошибаюсь, это одна из сущностей STL (Standart Template Library). Это не стандартные возможности языка, в самом языке Си нет итераторов. Если мне не изменяет память (а если изменяет, пожалуйста исправьте), в STL нет срезов. Есть метод типа slice (может copy, точно не помню), но именно среза нет. Так что особенности STL в применении к Python не самый убедительный аргумент.
Все сказанное, как всегда, IMHO.
- Goodrone 27 июля 2007 в 11:19
0
- PEP, Вы частично правы, там разные бывают, как стандарты, так и информационно-указательные. Тем не менее эт такое единое место, откуда исходят рекомендации что да как делать – имхо правильно.
А про C++ – тут речь именно о плюсах, а не о сях. В плюсах процесс стандартизации шёл в 1989–1998 годах и окончился фиксацией в ISO/IEC 14882-1998. То есть плюсы и стандартная библиотека (которая включает STL) – вещи неразрывные (согласно современному стандарту).
Про слайсы:
Тут собственно в основе лежит очень простая идея. Когда индексы для слайсов получаются динамически, следует избегать отдельной обработки пустых слайсов. То есть если мы получили в begin и end границы слайса, то
some_list[begin:end]
будет [ ], если значения begin и end равны. GvR здравомыслящий человек :)
gorinich 27 июля 2007 в 09:26
0
Насчет отступов. Если мы описываем достаточно длинный список, на Perl мы можем оформить его следующим образом:
my $array = [
'aaaaaaaaaa',
'bbbbbbbbbb',
'cccccccccc',
'dddddddddd',
'eeeeeeeeee',
];
Представьте, что в списке 20 элементов. Очень удобно таким образом оформить хеш. Оформить такой список одной строкой - получится нечитаемо. Перед каждым элементом стоит 4 пробела. Как Python воспримет такую конструкцию? Можно ли так делать?
Еще пример. Условный оператор с 10ю условиями (мало какие условия нам придется просчитывать). На Perl оформить очень удобно так
if (
условие1
||
условие2
&&
условие3
and
условие4
or
...
) {...}
Читается очень легко. Можно ли так сделать на Python? Ведь отступ это новый блок. Как он такое обрабатывает?
- Goodrone 27 июля 2007 в 11:21
0
Первый пример работает сразу после выкидывания my, доллара и точки с запятой.
А для такого if можно в конце строки ставить \ – тогда строки читаются как одна. Хотя если оставлять в конце строки оператор, например and или or, то никаких дополнительных символов не надо.
prudis 27 июля 2007 в 18:16
0
- И первое и второе можно делать как и в твоих приведенных примерах.
gorinich 27 июля 2007 в 09:43
0
Насчет стандартов табуляции. ЛОЛ! ЗАЧОТ!!!
Ради этого потратил маны и написал целых две строчки на питоне, впервые в жизни.
Вот:
#!/usr/bin/env python
print "0123456789"
print ">\t<"
Угадайте что я получил?
Табулятор в 7 пробелов!!!
Может где-то кто-то срез написал как [0:7]?
Ради такого не страшно 10 минусов получить
- gorinich 27 июля 2007 в 09:54
0
Немного ошибся. Все же не семь, а восемь пробелов.
Но все равно 8, а не 4.
Goodrone 27 июля 2007 в 11:27
0
По-моему это суть вывода символа '\t' в консоли, а не дело того, кто его выводит :) Выводятся-то не пробелы, а происходит сдвиг то восьмикратной позиции..
- gorinich 27 июля 2007 в 19:10
0
- \t - символ табуляции. При нажатии кнопки Tab выводится именно он. Просто некоторые редакторы его перехватывают и заменяют на определенное число пробелов.
А суть в том, что его стандартное значение 8 пробелов. Вернее от 0 до 8 пробелов. Ведь символ табуляции придуман, чтобы ровненько выводить колонки в консоли.
prudis 27 июля 2007 в 18:22
0
А какая взаимосвязь с рекомендацией о количестве проблелов для идентификации блоков кода и \t?
- gorinich 27 июля 2007 в 19:15
0
Вообще связи никакой. Но выше утверждалось что табулятор по стандарту 4 пробела.
- prudis 27 июля 2007 в 19:31
0
Ещё раз. Табуляция и рекомендованное количество пробелов для разделения блоков кода. Какая взаимосвязь?
- gorinich 27 июля 2007 в 19:43
0
Wellick 27 июля 2007 в 19:32
0
Ну Вам же объяснили, что это по стандарту (рекомендации, best practice, называйте, как хотите) Питона! А не по юниксовой консоли.
Но всё это такая ерунда, что и говорить не о чем. Любой современный редактор может вставлять вместо таба любое количество пробелов, а большинство могу менять пробелы табы. Нет никакой проблемы с этим.
- gorinich 27 июля 2007 в 19:45
0
Я говорил о стандартной табуляции вообще. Кстати файрфокс тоже ставит табуляцию в 8 пробелов. Это стандарт.
А то, что для форматирования кода табуляция выставляется в 4 пробела, это я уже 12 лет прекрасно знаю. Стандарт и рекомендация вещи принципиально разные. Я говорил о стандарте.
- Wellick 27 июля 2007 в 20:02
0
Так поэтому Вас тут и спрашивают, какое отношение имеет стандарт табуляции к отступам в Питоне? Ккстати, а покажете ссылку на этот "стандарт"? RFC, ANSI, ISO, ECMA? W3C на худой конец? Правда, интересно ведь.
- gorinich 27 июля 2007 в 20:17
0
Кстати, где я говорил о связи стандартов табуляции и отступов в питоне?
Я вижу Вы очень любите придираться к словам. Поэтому, покажите мне где я говорю о стандарте и его явной связи с именно питоном.
- Wellick 27 июля 2007 в 21:12
0
Вы довольно давно уже говорите об этом в топике про Питон.
Но я, ей богу, не хочу больше с вами бодаться. Во всяком случае, пока не получу ссылку на стандарт, где написано, что \t = 8 пробелов.
ajaxtelamonid 27 июля 2007 в 23:56
0
- Народ, ну хватит обсуждать эту фигню с табуляцией. Никто первым не хочет останавливаться, что ли, синдром козленка на мосту ? :) Какое отношение вообще это имеет к статье ?
Dimus 29 сентября 2007 в 21:11
0
> Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.
Просто нужно понимать под аргументами среза не номера элементов, а, уж не знаю как они называются правильно, номера промежутков между элементами списка чтоли.
_["a", "b", "c", "dog", "cat"]
_0__1__2__3___4___5
-5__-4_-3__-2__-1_____(альтернативный счет с конца)
Из этой схемы все становится понятнее:
>>> a[0:-2]
['a', 'b', 'c']
>>> a[-4:-1]
['b', 'c', 'cat']
>>> a[-4:5]
['b', 'c', 'cat', 'dog']
- gorinich 29 сентября 2007 в 23:08
0
- Уж очень искусственное определение :)
- НЛО прилетело и опубликовало эту надпись здесь
gorinich 26 июля 2007 в 18:47
–1
Еще один камень в огород языка :)
Глобальные переменные. Ну зачем это надо было сделать как в PHP?
По-моему логичнее было бы сделать доступ к глобальной переменной без лишнего изврата. А если есть необходимость внутри блока (функции) определить локальную переменную с именем, как у глобальной, то лучше (было бы) для этого использовать ключевое слово local.
P.S. Для тех, кто в оправдание будет говорить, что это сделано из соображений безопасности и т.д. отвечу: это проблема не языка, а программиста.
IMHO: Очередной язык для начинающих в духе PHP.
- Wellick 26 июля 2007 в 19:03
0
Глобальные переменные, как известно, зло. По возможности, их лучше их не использовать. Поэтому локальные переменные используются чаще, и вводить для них дополнительный префикс было бы неудобно. Во многом это вопрос вкуса, как и всё остальное.
По поводу "языка для начинающих в духе PHP" - это Вы смешно сказали :)
- p1lot 26 июля 2007 в 19:18
0
А откуда, если не секрет, вам известно про то, что глобальные переменные зло?
В мане по PHP я такого не видел.
- Wellick 26 июля 2007 в 19:28
0
- Я, честно говоря, даже не знаю, как Вам ответить :) Или этот комментарий - шутка?
В общем, на тот случай, если это не шутка:
"[Global variables] are usually considered bad practice precisely because of their nonlocality: a global variable can potentially be modified from anywhere, and any part of the program may depend on it. A global variable therefore has an unlimited potential for creating mutual dependencies, and adding mutual dependencies increases complexity."
[http://en.wikipedia.org/wiki/Global_variables]
Ну и богатый личный опыт, разумеется :)
prudis 26 июля 2007 в 19:16
+1
Перехожу постепенно с PHP на Python и ниразу пока не жалею. Приходится писать и на одном и на втором языке паралельно. Так вот когда сажусь за PHP мне противно на нём писать становится. А само больше вырубает меня "{}" для разделения блоков (в питоне с отступами очень удобно, хотя когда только приступал к его изучению было страшно с таким разделением кода), "$" перед переменными ну это полный какой то изврат, ";" в конце строк тоже не парит моск.
- den_rad 26 июля 2007 в 19:47
0
Я немного писал на C и Perl, поэтому синтаксис PHP показался мне вполне похожим.
Синтаксис Python'а и Ruby мне что-то не нравиться, может стоит написать на нем пару программок, чтобы разобраться.
a ps 25 августа 2008 в 10:23
0
- >А само больше вырубает меня «{}»
После работы с Алголом-Паскалем мне страшно не хватает скобок «begin-end», но это не стало для меня принципиальным недостатком всех последующих языков
flint 26 июля 2007 в 20:45
0
Очередным языком для начинающих в духе PHP он стал только из-за глобальных переменных, блоков и механизма срезов?
- gorinich 26 июля 2007 в 21:09
–3
Я не считаю правильным общаться на подобные темы с человеком, который собирается стать отцом Бритни Спирс.
- flint 27 июля 2007 в 16:28
0
Вы совершенно правы: когда объективно нечего ответить, нужно сразу переходить на личности. А не то пустобрехом посчитают ведь!
- gorinich 27 июля 2007 в 19:22
0
Объективно не на что отвечать :)
Спасибо за минус ;) Очередной фанат питона? Я знаю о чем говорю, программирую уже 12 лет на разных языках, и могу кое о чем посудить ;) Готов спорить это твой первый скриптовый язык, ну максимум второй
- flint 27 июля 2007 в 22:29
0
Спорь. То, что ты программируешь уже 12 лет говорит вообще ни о чем. Зато кое о чем говорит то, что ты скрыл некоторую часть текста. Молодец, чо.
Wellick 28 июля 2007 в 00:25
0
Судя по Вашему профилю, мы с Вами одногодки.
Вы действительно с 11 лет программируете и считаете это стажем? :)
- gorinich 28 июля 2007 в 00:41
0
- Я действительно программирую с 11 лет. Но если честно, то достаточно много метался между языками и страдал фигней. Программирование было моим хобби и развлечением.
Реально стажем считаю последние три года. Именно эти три года я занимаюсь программированием профессионально.
s cam 26 июля 2007 в 20:20
0
Язык вынуждает нормально форматировать код, чтобы читабельней было. Неплохая задумка :) Кстати он в гугле активно используется. Наверно задачи с map-reduce на нём несложно реализовываются.
- Michael_P 26 июля 2007 в 20:22
0
И не только в гугле. Еще в википедии, линейке и много где еще.
- gorinich 26 июля 2007 в 21:10
0
Если не ошибаюсь, Википедия написана на PHP.
- Michael_P 26 июля 2007 в 21:18
+1
- Я говорю о pyWikipedia-ботах .
r ipos 26 июля 2007 в 21:25
0
if number in (3, 4, 7, 9): #Если переменная number входит в список (3, 4, 7, 9)...
Опечатка: в кортеж, а не в список.
- Michael_P 26 июля 2007 в 21:30
0
Очень правильное замечание!
r ipos 26 июля 2007 в 21:39
0
- И ещё немного мелких камешков:
> # объявить такую переменную для объекта. Причем
> # tэта переменная будет членом только classinstance.
Здесь неправильный цвет текста. =) + Опечатка.
Аналогично неправильная покраска:
> Исключения в Python имеют структуру try-except [exceptionname]:
> >>> fnexcept()
Некорректные отступы:
> # Но программа не "Выполняет недопустимую операцию"
> # А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
Matohin 27 июля 2007 в 00:21
0
>В стандартные библиотеках Python
исправьте, плиз
Goodrone 27 июля 2007 в 01:24
0
Проделана хорошая работа!
А давайте перенесём это в блог Python?
- Michael_P 27 июля 2007 в 09:31
0
runawayed 27 июля 2007 в 02:03
0
простите, может я глупый вопрос задаю.. статья хорошая, спасибо, но, мне кажется, совсем бы не помешал пример "hello world" :))
а именно, где хранится, как выполняется, компилируется или интерпретируется, какие среды разработки если они есть и, наконец, какое расширение должен иметь файл? :))
спасибо)
а ввобще - на первый взгляд синтаксис мне не очень понравился.. если язык претендует на высокую читабельность кода: я не понял, как в нем реализовать логические скобки для разделения порядка и наглядности выражений?
и хотелось бы узнать про другие операторы, кроме "="...
- mocksoul 27 июля 2007 в 03:27
0
- высокая читабельность кода получается из жестких требований к отступам.
в пхп вы могли бы написать
if () {
..
}
if () { .. }
if ()
{
..
}
и даже
if ()
{ .. }
в питоне же - вариант только один
if cond:
..
так или иначе - получается что чьи бы исходники на питоне вы не открыли - везде будет только 1 вариант. И никак иначе. Особенно учитывая тот факт что фреймворки а-ля Zend и вовсе сейчас рекомендуют смешивать стили:
function asd()
{
}
if () {
..
}
Среду разработки лучше смотреть ту которая на питоне на самом и написана :) Заодно неплохой пример будет. wing ide скажем.
helloworld (лучше уж game over :))
hello.py:
#!/usr/bin/env python
print "Hello, World!"
#sh >python hello.py
:)
G eorge_Tahoe 27 июля 2007 в 03:41
0
1. Пример хелловрда есть в статье. Однако приведу его здесь:
>>> print "Hello World!"
где >>> - приглашение интерпретатора.
2. http://ru.wikipedia.org/wiki/Python снимет основную часть вопросов.
Однако IDE\shell'ы упомяну(до конца пункта 2 идет исключительно мое мнение):
IDLE - неплохо, но минимализм скучен.
PyCrust - очень удачный shell.
WingIDE - имеет один недостаток - платность.
Boa Construstor - мощен, однако интерфейс не является интуитивно понятным.
3. Операторы и все все все. В питоне интерактивный хелп, это очень удобно.
Вы делаете так:
>>import operator
>>help(operator)
и получаете обзор операторов.
4. расширение .py
Один из приятнейших языков, по моему скромному мнению. Синтаксис чудесен- мне переодически приходиться писать мелкий программки на C и MatLab - на питоне писать приятнее. Его, как я подозреваю, очень любит ученый люд - научных библиотек под него очень-очень много.
p.s. пример логических скобок тоже есть в статье: посмотрите раздел операторы внимательней.
p.p.s. Удачного изучения =)
mocksoul 27 июля 2007 в 03:51
+8
Если честно - питон штука хорошая, а статья - дурацкая. Непонятно для кого статья? Для начинающих? Упущено дофига теории. Для уже-знающих-другой-язык? В таком случае объяснение как расставлять двойные и одинарные ковычки в строках для кого? :)
Да и о питоне тут мало. Мало хорошего.
1. Многопоточность (пусть и с GIL, но все же)
2. Сильное ООП. Особенно радуют возможности манипуляции классов. Так, паттерн Singleton на питоне невозможен. Зато можно "расшарить" состояние объектов между их инстанциями. Куда более продвинутый и чаще нужный вариант.
3. Скорость. СКОРОСТЬ! Особенно если взять psyco (иногда получится быстрее чем C и это не шутка).
4. Изобретай-не-хочу. Есть PyPy. Питон написанный на питоне. Экспериментировать там с движком для энтузиастов - милое дело ;)
5. Stackless Python. С возможностью переключения стека C.
6. Self-Документирование. Так, открыв питон (сам интерпретатор). Пишем import sys. Затем help(sys). Весело? А теперь представьте - копаетесь вы в какой-нибудь программке. И запутались. И прям там в середине кода help(ЧТО_УГОДНО). И в консоли где порграмма исполняется будет help.
7. Питон легко может стать "связующим" языком. В него легко писать модули на Си. Ничуть не сложнее в программу на Си вставиьт интерпретатор питона. Не сложнее и в Яву питон впихнуть (Jython). И наоборот. В итоге питон и впихивают везде и вся. Скоро и Mozilla обещает в Firefox вставить наряду с JS. А пользователи линукса наверное уже давно заметили что и в муз. плеере и в граф. приложениях - уже везде можно писать скрипты на питоне :)
8. Python vs Perl: они достойны друг друга.
9. Python vs Ruby = Django vs ROR. RoR чертовски хорошо. А django оказывается почти на 300% быстрее :). В Ruby ещё подкупают блоки и концепция "всё - объекты" (очень уж легко читается: 5.times { do_something })
10. Библиотека скриптов. Так или иначе но и веб-сервер и работа с тегами - ну прям все там есть.
11. Python vs PHP: PHP Manual ROCKS! Начинающим (тем кто впервые программить садится) в питон лучше не лезть.
12. Встроенная возможность (и необходимость) компиляции в байткод. А так же сохранение этой стадии в виде файла *.pyc или *.pyo. После чего возможно распространение только байткода без полных исходников.
13. Segfault у меня у него получается выбить куда реже чем у PHP, например %)
14. Генераторы. Да.
В качестве огормного ЖИРНОГО минуса - GIL. Или Global Interpreter Lock. Из-за этого урода 8-ядерный сервер можно загрузить только на треть или чуть более (где то 250% из 800% у меня получалось). Т.е. конкуретное исполнение кода (необходимый минимум для GUI приложений) в питоне есть, но вот эффективной многопоточности - нет (пока?).
Сейчас питон уже популярен. И вы даже не представляете насколько. В России разрабтчиков днём с огнём не сыщешь. А ведь его уже ставят в практически все дефолтные поставки дистрибутивов линукс. Яву, знаете ли не пихают. PHP тем более. Перл - да. Но я же сказал они друг друга стоят ;).
Я вот питон люблю. С каждым днём все больше. Уж и не помню в чем была такая необходимость его изучить. Наверное Пол Грэхэм. И его эссе "Python Paradox" (погугл... поищите!). А с тех пор постоянно нахожу в нём что то новое (чего только стоило понять возможность расшаривания состояний между объектами вместо паттерна одиночки!).. И кажется нет этому конца и края %)
Кстати многое в статье относится только к Python 2.4
Например в Python 2.5 мы уже имеем очень весёлую модель исключений:
try:
except:
..
else:
..
finally:
..
Так же появился оператор with... =)
Кстати говоря "научить" язык пониманию скобок и традиционного синтаксиса - в общем-то, легко. Кажется такой проект в инете где-то есть... Понимать отступы сложнее чем искать скобки %)