hoppy — репозиторий Дэвида Бизли с древними версиями питона, начиная с 0.9.1 (1991 год). По сути, это вторая выпушенная версия, и от первой она отличается только багфиксами. На википедии на странице History of Python можно примерно посмотреть, какие фичи когда появлялись. И ещё в официальном репозитории есть огромный файлик HISTORY.
В общем, я уствовил самый древний Python.
['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](https://t.me/itgram_channel/309)? Так вот, некоторые функции тоже были в 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```
Ух, столько всего! Надо доклад делать, в общем.