Python3
最近在对接 Python3 写的项目,也从中学习一些 Python3 的风格。总的来说,Python3 就是向静态编程语言靠拢,比如以下几个特性:
Typing
def greeting(name: str) -> str:
return 'Hello ' + name
是不是有种 C 语言即时感?只是把类型指定放在变量后面。
配合Typing
模块使用
from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
这种使用方法虽然骤眼看上去好像比较不直观了,比如你可能在某个程序中看到 Vector 类型要去回溯具体定义,但是在大型程序编写中可以提高代码的可读性(后期已经对 Vector 这个类型非常熟悉了)。
Variable Annotations
captain: str # Note: no initial value!
初始化变量,C 语言即时感。
mypy
值得注意的是,虽然 Python3 提供了这种类似静态语言的变量类型提示,但是实际上并不检查。但可以通过 mypy 这种类似 pylint 的静态代码检查工具,通过类型提示对 python3程序进行检查。
Python 测试模块 Mock 功能
https://pythonguidecn.readthedocs.io/zh/latest/writing/tests.html
其中 Unittest 应该是比较常见的测试模块,文章最后介绍了 unittest 集成的 mock 功能,可以在单元测试的时候直接代替一些函数或者方法,能够实现不修改源码、甚至不用修改配置文件的情况下完成单元测试。
如这个例子就是把 Calculator
类中的sum
方法替换掉,变成一个返回值始终是9
的函数。
from unittest import TestCase
from unittest.mock import patch
class TestCalculator(TestCase):
@patch('main.Calculator.sum', return_value=9)
def test_sum(self, sum):
self.assertEqual(sum(2,3), 9)
这个还是比较好玩的,对于写单元测试提供方便的 mock 功能。
Git 重写提交 commit 的历史
https://www.atlassian.com/git/tutorials/rewriting-history
有三种方法可以实现,但是要注意不要用在已经 push 到服务器的分支上,否则会引起其他开发者的分支混乱。(除了这个分支只有你一个人在开发的情况,可以用git push -f 强行变更远程分支)
- git commit --amend 把当前修改合并到上一次提交
- git rebase 可用于修改任意历史记录,合并压缩 commit,减少历史 commit 来达到“美化”效果。
- git reflog 可以查到所有回滚、删除的 commit 信息,并通过 reset 回到对应的分支上。(这个方法更像回滚操作多一点)
发现在 Git 中有可能会用到的功能是根据时间进行回滚和比较。
git diff master@{0} master@{1.day.ago}
『浅入浅出』MySQL 和 InnoDB
https://draveness.me/mysql-innodb
上周分享事务的文章同个博客的 MySQL 介绍文章,作为非专业 MySQL 玩家的查漏补缺。
Octotree 插件用于浏览 Github 代码
(支持 Chrome、Safari 等主流浏览器)
https://github.com/buunguyen/octotree
可以将 Github 上的项目的源码在左侧栏展示代码结构,方便浏览,类似各大 IDE 的代码目录。