很多人说Python适合零基础入门。这个说法本身没错。但“零基础”三个字太模糊了。你到底是零基础还是有点基础?很多人学了两三个月,回头一看,发现自己连基础的门槛都没摸到。
基础不是你会不会写print(“hello world”)。基础是一套能让你独立解决问题的底层能力。下面三个自测指标,你拿来自查一下。每个指标都跟实际开发场景挂钩。不是背题,是看你能不能干活。
自测一:变量赋值和基本运算你会不会踩坑
打开编辑器,写一行代码。a = 10。这事谁都会。但换个场景,你写b = a。然后你改a的值,b会跟着变吗?这里涉及到可变对象和不可变对象。很多人写了一年代码还在这上面翻车。
真实的开发场景是,你在处理列表。你写list2 = list1。然后你修改list2里的元素。结果list1也跟着变了。你当时就懵了。这就是基础没打牢。你需要知道赋值传递的是引用。你也需要知道浅拷贝和深拷贝的区别。不需要你背概念。你动手写一段代码,能避开这个坑,就算过关。
再测试一个。你写result = 0.1 + 0.2。打印出来是多少?不是0.3。是0.30000000000000004。你知道这是浮点精度问题。你处理金额的时候,知道要用Decimal模块。这叫基础。
自测二:函数和循环,在复杂场景下你能否写对
写一个函数计算阶乘。用递归还是用循环?递归不加终止条件,直接栈溢出。你调了三次还不对,你搜了十分钟才想起来加return。这种问题面试不会考。但工作中天天见。
真实场景往往更折磨人。你写一个循环。for i in range(10)。里面再套一个循环。你同时操作同一个列表。你改了元素,下一个循环顺序乱了。数据错位了。报错了。你开始怀疑人生。写清楚循环的边界条件,控制好索引的偏移量。能自己在纸上画出每一步的执行结果。这就是真本事。
还有一个常见坑。你在函数里用了一个可变对象做默认参数。def func(a=[])。调两次之后发现a一直在累积之前的元素。你查了文档才知道默认参数只在定义时执行一次。这种细节没人告诉你。你得自己踩过坑再记住。记住之后下次写代码直接避免。这就是基础。
自测三:遇到报错信息,你能不能独立搞定
写代码不出错不可能。TypeError: ‘int’ object is not callable。这种报错你见过吗?你敲了len = 10。然后你写len(list)。Python懵了。它不知道你是在调函数还是在用变量。你把内置函数给覆盖了。
初学者看到报错,第一个动作是去群里问。或者直接复制粘贴到百度。老手不一样。老手先看错误类型。是AttributeError还是ValueError。再找错误行号。再看上下文。然后自己动手试。改一下。再试。解决不了再查文档。这不是玄学。能看懂80%的常见异常信息,能自己解决70%的运行错误。这就算基础达标。
还有一个指标。你写代码的时候能预判到可能哪里会崩。你知道用户可能会传空列表。你知道文件可能不存在。你知道除法时分母可能是0。你在这些位置加了判断或者异常捕获。这叫有防御性编程的思维。这不是高级技巧。这是基础。
这三个指标你对照一下。变量赋值和基本运算不出错。函数循环的细节能掌控。遇到报错能自己爬出来。做到了,你的基础就算打好了。做不到,老老实实回去补课。别急着学框架。
Python的语法糖很多。列表推导式、装饰器、生成器,都是好东西。但基本功不牢,你用这些高级特性只会写出更恐怖的bug。基础是建房子的地基。地基不牢,上面盖再多也是危房。