每个人获得的东西都恰好是他值得获得的东西

C

I don't know c

关于scanf

我之前大学学了和用了好几年的c,从来没注意到scanf函数的第一个参数是在定义模式匹配

多维数组做参数

对于多纬数组,是按行放的。例如:

   int ex[10][10];

是先存第0行,然后第一行,然后第二行,在给形式参数赋值的时候,是把指向数组第一个元素的指针给了函数。
假如:

   int test(int ex[][10], int n)
   {
       int sum = 0;
       for (int i = 0; i < n; i++)
        for (int j = 0; j < 10; j++)
            sum += ex[i][j];
       return sum;
   }
Continue reading

python

理解Python的切片表示

它非常简单:

# 译者:切片用数学的区间表示的说法都是左开右闭的 [),即含左不含右
a[start:stop] # 取从start到stop-1
a[start:] # 取start到a的最后一个元素
a[:stop] # 取第0个到stop-1个元素
a[:] # 复制整个list

还有个step(步长)的值,可以一起用:

a[start:stop:step] # 从start开始包含start,到stop-1为止,取每隔step个的元素
# 译者注:
a = [1,2,3,4,5]
a[0:4:2] == a[1,3]

要记住的关键点是:stop值表示不在所选中的元素中的第一值,所以stop和start他们之差
是选择的元素的数量(如果step是默认值1)
Continue reading

git

git pre-commit workflow

之前看了程序人生的一篇code is law,做了点小小的实践。想起在QQ群看到一个人的分享截图,于是就想将之前做的实践查到的资料删减翻译下整理成文章,如果万一有团队内部的技术分享会还是可以分享下的。

我想遵循pep8,我不想手动格式化代码,我不想每次手动执行flake8来检查,甚至我不想手动执行mypy去检查我代码。

那么有什么办法呢,作为开发,日常最常执行的操作git commit必然是其中之一,无论是通过IDE的GUI工具还是命令行的方式。

通过git提供的pre-commit的hook可以在commit的时候将代码格式化,规范检查,测试等执行完毕,而不需要工程师手动做相关的操作。流程类似这样的:

workflow

通过采用pre-commit 这个Python编写的库只需要以下几步就可以完成上述任务。

  • pipenv install -dev pre-commit
  • 编辑.pre-commit-config.yaml
  • 执行pre-commit install 以便在.git/目录中安装git hooks
Continue reading