В последнее время я пишу python, играю с различными лиспами (в основном common lisp) и много работаю на AWS. Поэтому я решил написать быстрый пост на классном лиспе на основе python, с которым я играл около 45 минут.
Хайланд
Вот как я настроил свою среду для быстрой разработки Hyland (официальные документы тоже довольно хороши. Я встал и побежал за 15 минут, а то и меньше.)
$ pyenv local 3.72 # this is just the latest I had installed already
$ pyenv virtualenv tmp-hy
$ pyenv activate 3.7.2/envs/tmp-hy
$ pip install git+https://github.com/hylang/hy.git
Эти 3 заклинания дадут вам хорошую изолированную установку Hylan g. Вы можете запустить интерпретатор, набрав просто hy
или вы можете дать ему файл для жевания, сказав hy some-code.hy
.
Поскольку в последнее время я часто использую DynamoDB, я решил попробовать немного boto3. Оказывается, это довольно просто.
если вы следуете за мной, убедитесь, что вы уже $ pip install git+https://github.com/hylang/hy.git
а также обязательно запустите: $ pip install boto3
(import boto3) (setv dynamo-resource (boto3.resource "dynamodb")) (setv blog-post-table (dynamo-resource.Table "blog-posts")) (setv key-expr { "id" "7" "md5" "ef7582d3ccac18418063bd19715614af" }) (print key-expr) (setv item (get (blog-post-table.get-item :Key key-expr ) "Item")) (print item)
если вы введете: hy lispy-boto.hy
он распечатает сообщение в блоге.
Еще лучше, мы могли бы определить такую функцию, как:
(setv dynamo-resource (boto3.resource "dynamodb")) (defn lispy-get-item [hash_key_name hash_key_val range_key_name range_key_val table_name] (setv dynamo-table (dynamo-resource.Table table_name)) (setv key-expr { hash_key_name hash_key_val range_key_name range_key_val }) (get (dynamo-table.get-item :Key key-expr) "Item"))
и мы можем импортировать эту функцию в обычный ‘ol python, как:
import hy lispy_boto = __import__("lispy-boto") # hack because I named the file with a `-` item = lispy_boto.lispy_get_item( "id", "7", "md5", "ef7582d3ccac18418063bd19715614af", "blog-posts") # You could use kwargs to make this more pythonic print(item)
Это всего лишь царапина на поверхности, но я был удивлен, насколько это было легко и как мало потребовалось возиться.
Hyland можно найти на github и docs не так уж и плохо. Действительно классный проект пишется здесь…