一周学习精选(2018-09-09)

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 功能。

参考介绍 Mock 使用的文章

Git 重写提交 commit 的历史

https://www.atlassian.com/git/tutorials/rewriting-history

有三种方法可以实现,但是要注意不要用在已经 push 到服务器的分支上,否则会引起其他开发者的分支混乱。(除了这个分支只有你一个人在开发的情况,可以用git push -f 强行变更远程分支)

  1. git commit --amend 把当前修改合并到上一次提交
  2. git rebase 可用于修改任意历史记录,合并压缩 commit,减少历史 commit 来达到“美化”效果。
  3. 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 的代码目录。

chrome-github.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容