python

2022

新旧版本的 Python Generic 的一些区别

首先要声明的是,尽管 Python 是一种动态类型1的语言,但是 Python 在 3.x 版本中还是引入了类型标注 (Type Annotation) 机制,使得我们可以以一种类似静态语言的方式来标注函数入参、返回的类型,或是类的成员类型。这种方式看似使得代码变得更加繁琐,但是合理的类型标注可以被编辑器/IDE 的静态检查机制所利用,进而提供更丰富的代码补全服务和静态错误排查服务。这使得我们在使用 Python 开发结构非常复杂的软件的时候能够提高编写效率,并减少大部分低级错误。

Feb 10

2021

Python: JSON 数据转化成 Python 对象的方法

1 问题描述

JSON 格式的数据在和服务器通信过程中很常见,用 Python 处理我们可以用 json 库来读取,将其转化成一个字典。不过字典访问语法太繁琐了,我们需要将其转化一般对象,然后用访问类属性的方法去访问 Key-Value 对。直接硬写的非常繁琐,我们需要显式地讲类定义出来,然后一个个读取属性然后完成复制。我们需要一个更加符合 DRY (Dont Repeat Yourself) 原则的方法。

Jul 20
Python 以及 Bash 处理命令行参数的模板

Python 和 Bash 是很方便的便携命令行工具的语言。在实现命令行工具时,为了保障工具的灵活性,我们希望很多参数可以通过命令行来设置。这篇文章我们整理一下 Python 和 Bash 脚本编写过程中命令行参数的处理方法。

Jun 17
Python 中的 Inspect 模块

1 背景

今天在 Github 的时间线上看到了一个有意思的 Python 库,名字叫做 "IceCream"。这个库用来取代 print() 函数,实现更加可控且优雅的调试输出。IceCream 的接口形式非常简单,只要直接将函数的调用形式传入即可。如下面的代码:

1
2
3
4
5
6
from icecream import ic

def foo(i):
return i + 333

ic(foo(123))

会产生下面的输出

1
ic| foo(123): 456

这个是怎么实现的呢?我查了一下代码发现 ic 函数(实际上一个实现了 __call__ 的类的实例)主要使用了 inspect 这个库。这是一个 Python 的标准库而我从来没有用过。

May 27

2020

[翻译]从头开始训练一个卷积神经网络

原文地址是: Training a Convolutional Neural Network from scratch。原文的撰写时间是2019年6月7日。

在这篇文章中,我们将会深入了解卷积神经网络(Convolutional Neural Networks, CNN),重点是如何训练一个卷积神经网络。这篇文章会教你如何推导梯度,实现backprop过程(只使用numpy),并最终建立起一个完整的训练的工作流。这里我们架设你对于什么是卷积神经网络有一个基础的了解。如果你还缺乏最基本的知识,可以阅读原文作者的文章。同时文章中部分地方还假定你对于多元微积分有一定的了解基本上你好好上过大学的高等数学应该就能理解

Feb 29

2019

旧文迁移|Django 部署:Nginx+Gunicorn+virtualenv+supervisor+PostgreSQL

Django 是最受欢迎的基于 Python 的 web 框架之一,也非常适合新手入门。虽然 Django 为我们提供了一个用于测试的轻量级 server,但这个 server 不能用于实际生产环境的部署。最早的 Django 的部署方法推荐的是 Apache+mod_wsgi。演化到现在,django 的部署方法也变得越来越弹性、有效,也更加的复杂了。在下面的教程中我们需要使用下面的这些工具:

  • Nginx: Web 服务器
  • Gunicorn: WSGI 服务器
  • virtualenv: Python 虚拟环境工具
  • supervisor: 进程监管工具
  • PostgreSQL: 数据库(也可以使用 MariaDB)
Aug 30