3 篇文章带有标签 “programming”

可以说,在我人生的前四分之一个世纪里,尽管我对编程一直充满痴迷,却始终无法摆脱一种内疚感——我总是在怀疑,自己手头正在构建的工具,是不是早在 30 年或 40 年前就已经被别人用更好、更完美的方式实现了。比如,我可能会自己写一个支持 TSV(标签分隔值)的查找与替换程序,但随后却发现早就有了一个叫 awk 的工具,能一举解决这一整类问题。

而我核心的论点在于:这其实是一个陷阱

必须去重新发明几个轮子,才能触及人类对“造轮子”这件事的认知边界。不是发明一千个轮子,也不是一个都不发明。在大多数领域,重新发明四五个轮子就足够了;而在数学计算机科学这种在认识论上极度严密且成熟的领域,这个数字可能更接近二十三十个。你所重新发明的每一个轮子,以及一路上提出的每一个针对性问题,都会把你推向真正的技术前沿——其速度之快,是把同样的时间花在盲目死板的学习上,甚至是花上其五倍的时间,都无法比拟的。 来源: Simon Willison 的网络日志

Andrew Quinn

Python in Visual Studio Code

开发文档

扩展

选择 Python 解释器

  1. 通过 Shift + Command + P 快捷键,打开命令面板。
  2. 输入 Python: Select Interpreter ,回车。
  3. 选择您想使用的环境。

在状态栏上可以单击进行切换不同的环境

测试

我选择了 pytest 测试框架,这个写起来更自然且简单。

Python实践

语言

变量

  • 变量的赋值,只是表示让变量指向了某个对象,并不表示拷贝对象给变量;而一个对象,可以被多个变量所指向。
  • 可变对象(列表,字典,集合等等)的改变,会影响所有指向该对象的变量。
  • 对于不可变对象(字符串、整型、元组等等),所有指向该对象的变量的值总是一样的,也不会改变。但是通过某些操作(+= 等等)更新不可变对象的值时,会返回一个新的对象。
  • 变量可以被删除,但是对象无法被删除。

函数参数传递

Python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已,并不存在值传递或是引用传递一说。

  • 不可变参数
>>> def func(x):
...     x=2
... 
>>> n=1
>>> func(n)
>>> n
1
  • 可变参数
>>> def func(x):
...     x.append(2)
... 
>>> l=[1]
>>> func(l)
>>> l
[1, 2]
  • 最佳实践(不管参数是可变还是不可变,明确地返回值。)
>>> def func(x):
...     pass
...     return x
... 
>>> n=1
>>> n = func(n)
>>> n
1