hoppy — репозиторий Дэвида Бизли с древними версиями питона, начиная с 0.9.1 (1991 год). По сути, это вторая выпушенная версия, и от первой она отличается только багфиксами. На википедии на странице
History of Python можно примерно посмотреть, какие фичи когда появлялись. И ещё в официальном репозитории есть огромный файлик
HISTORY.
В общем, я уствовил самый древний Python.
>>> dir(builtin)
['EOFError', 'KeyboardInterrupt', 'MemoryError', 'NameError', 'None', 'RuntimeError', 'SystemError', 'TypeError', 'abs', 'chr', 'dir', 'divmod', 'eval', 'exec', 'float', 'input', 'int', 'len', 'max', 'min', 'open', 'ord', 'range', 'raw_input', 'reload', 'type']
Обратите внимание на отсутствие функций
str и
list. Литералы есть, но приводить типы ещё нельзя, у меня получилось только
float в
int. Также ещё нет comprehensions, generators. А ещё filter, map, reduce, они в 1.0 появились благодаря одному лисперу. Зато уже в первой версии есть
else для
for и
range (причём даже с поддержкой отрицательного шага).
А ещё не переживайте из-за отсутствия
print в списке, он же ключевым словом просто был до 3.0.
Атрибутов у встроенных типов не было by design:
>>> ''.join([1,2,3])
Unhandled exception: type error: attribute-less object
Например, для строк был модуль в stdlib:
>>> import string
>>> string.lower('AAaA!')
'aaaa!'
Вообще, из знакомого там path (сейчас os.path), calendar, shutil, glob, dis. А ещё там отступы 8 пробелов))))
Ну ладно, а хотите знать, как к строке то приводить?
>>> a = 1
>>> b = [2,3,4]
>>> `[a] + b`
'[1, 2, 3, 4]'
А я то всё гадал, почему бэктики не используются нигде. А ещё двойные кавычки не pythonic, вот так то:
>>> "1"
Parsing error: file <stdin>, line 1:
"1"
^
Unhandled exception: run-time error: syntax error
Исключения были строками:
>>> SystemError
'system error'
А помните пост про
lambda calculus? Так вот, некоторые функции тоже были в stdlib, в модуле lambda:
def Never(f, x): return x
def Once(f, x): return f(x)
def Twice(f, x): return f(f(x))
def SUCCESSOR(Ntimes, (f, x)): return f(Ntimes(f, x))
А я всегда говорил, что двоеточия в питоне нужны, чтобы условия, функции и всё такое можно было в одну строчку писать, lambda выражения только в 1.0 появились.
ИЛИ НЕТ???
# P.S.: Here is a Lambda function in Python.
# It uses 'exec' and expects two strings to describe the arguments
# and the function expression. Example:
# lambda('x', 'x+1')
# defines the successor function.
def lambda(args, expr):
if '\n' in args or '\n' in expr:
raise RuntimeError, 'lambda: no cheating!'
stmt = 'def func(' + args + '): return ' + expr + '\n'
print 'lambda:', stmt,
exec(stmt)
return func
Пробуем:
>>> from lambda import lambda
>>> lambda('a', 'a+1')(4)
lambda: def func(a): return a+1
5
Ух, столько всего! Надо доклад делать, в общем.