学Python的建议
底楼才是重点!!!内容有些长
1.编程适合不惧挑战,肯学的人,积累的经验,技能,然后规划一下人生,相信此生不悔
2. 零基础,没经验的,是自学还是报培训看个人了,我没参加过培训,听过一些课,有好的培训和差的,推荐那种包工作的,至少花钱了能有份工作
3. Python招聘岗位少,这也是很多学了Python最后找不到工作的原因之一,Python集中在web开发,爬虫,运维方向,什么大数据,AI都是扯淡,玩这些的不会几门编程语言和多样的技能跟本搞不来。运维就别想了,新手很少从运维方向的。就剩爬虫和web了(都是差不多的方向,不过高手都是全会的)推荐去看看招聘需求,都是中高级岗位,要求都不低,当然有些要求是复制粘贴的,从招聘要求适当减一点差不多是真实情况,最重要的是工作经验,如果你是自学的为了能去面试编了工作经验算是炸胡吧,看你造化了。
总之,好好考虑是否学Python吧,不要想着一步登天,大家都是一步一步来的。我不会直接推荐你要不要学,我希望你从我的经验来决定要不要学,因为人生从来都不是选择题(这口鸡汤我先干了!)。
开始我们的正言
enumerate()代替range(len())
问题:遍历一个列表,把里面小于0的值置为0。
遍历列表,是开发过程中经常会涉及到的一种操作。
大多数Python开发者都习惯于使用range(len())语法,这一种方式是很多教程、书籍上介绍的,因此,很多同学也就默认选择使用这种方式去遍历列表。
在遍历列表里,使用enumerate()枚举函数是一个更佳的选择,因为它可以同时获取索引和当前项,这对在很多场景下是非常实用的。而使用range(len())却不能兼顾索引和当前项。
data = [1, 2, -3, -4]
# range(len())
for i in range(len(data)):
if data[i] < 0:
data[i] = 0
# enumerate()
data = [1, 2, -3, -4]
for idx, num in enumerate(data):
if num < 0:
data[idx] = 0
列表表达式代替for循环
问题:求一个列表中所有制的平方。
如果使用比较常用的for循环方式是这样的:
squares = []
for i in range(10):
squares.append(i*i)
而使用列表表达式,是下面这样的:
squares = [i*i for i in range(10)]
一行代码就可以实现for循环3行代码才能实现的功能。
列表表达式非常强大,它还可以结合条件语句进行使用。
不过,不要过度使用列表表达式。因为,它使代码变得简单的同时也增加了阅读理解的成本。所以,在一些复杂的语句不建议使用列表表达式。
使用set去重
问题:对一个列表中的元素进行去重。
当看到这个问题,获取有的同学会想到很多复杂的方法,遍历、字典....
如果使用set一行代码就可以实现列表元素的去重。
因为,set是一种无序的集合,所以,它会自动去除列表中的重复元素。
my_list = [1,2,3,4,5,6,7,7,7]
set(my_list)
# set([1, 2, 3, 4, 5, 6, 7])
利用生成器节省内存
问题:如果列表中有10000个元素,该如何节省内存?
如果元素比较少,使用列表是一个比较好的选择。如果元素多到一定程度,那么列表就变得非常耗费内存。
形象的解释生成器,就如同它的名称一样,它每次只生成一个元素,当调用它的时候,它会逐步生成下一个元素。如果不调用它的话,它就是一个非常节省内存的函数。
下面来对比一下,
import sys
my_list = [i for i in range(10000)]
print(sys.getsizeof(my_list), 'bytes') # 87616 bytes
my_gen = (i for i in range(10000))
print(sys.getsizeof(my_gen), 'bytes') # 128 bytes
可以看出,同样是10000个元素,在内存占用方面,使用列表是使用生成器的684.5倍。
使用.get()和.setdefault()访问字典
问题:访问一个字典中的值。
当通过key访问字典时,如果字典中没有这个K-V值,那么,它会报错、终止程序,并返回KeyError。
所以更好的方法是在字典上使用.get()方法。这也会返回键的值,但是如果键不可用,它不会引发键错误。相反,它返回指定的默认值,如果没有指定它,则返回None。
my_dict = {'item': 'football', 'price': 10.00}
price = my_dict['count'] # KeyError!
# better:
price = my_dict.get('count', 0) # optional default value
使用字典进行计数是一种常用的操作。
在这个过程中,需要首先判断字典中是否存在key,然后赋给默认值,而使用.setdefault()可以直接给字典设定默认值。
使用collections.Counter计数
问题:统计列表字段中的元素出现次数,筛选出现频率最高的元素。
在项目开发过中,计数、统计频率,是经常会遇到的问题。
而Python自带的标准模块collections.Counter提供了很多好用、强大的技术方法,只需要一行代码,就可以完成很多复杂逻辑才能完成的工作。
例如,要统计一个列表中出现频率最高的元素,可以这样实现:
from collections import Counter
my_list = [10, 10, 10, 5, 5, 2, 9, 9, 9, 9, 9, 9]
counter = Counter(my_list)
most_common = counter.most_common(2)
print(most_common) # [(9, 6), (10, 3)]
print(most_common[0]) # (9, 6)
print(most_common[0][0]) # 9
使用**合并字段
问题:2个字典,把元素合并到同一个字段里
不需要经过2层遍历去读取字典中的元素,然后在把这些元素合并到同一个字典中,只需要简单的双星号**就可以实现这个需求。
这种语法是自Python 3.5以来的新语法,在Python3.5之前无法使用。
下面来看一下示例:
d1 = {'name': 'Alex', 'age': 25}
d2 = {'name': 'Alex', 'city': 'New York'}
merged_dict = {**d1, **d2}
print(merged_dict)
# {'name': 'Alex', 'age': 25, 'city': 'New York'}
使用if x in list简化条件语句
问题:判断是否等于列表中的某个元素的值。
习惯于C/C++、Java等其他编程语言进行开发的同学,当遇到条件语句时,会选择==或者!=来进行判断。
如果需要判断的条件较多的话,这样需要写很长的语句,例如:
colors = ["red", "green", "blue"]
c = "red"
if c == "red"or c == "green"or c == "blue":
print("is main color")
而在Python中,对于条件语句进行了很大程度的简化,可以使用in来解决这个问题,只需要简短的一行代码就可以完成。
colors = ["red", "green", "blue"]
c = "red"
if c in colors:
print("is main color")
虽然以上貌似是微乎其微的调整变化,但却会令你的代码更易于阅读,同时一定会让你因重复编码而深陷其中!
结论
这8个技巧可以改善你的代码质量,让你的代码看起来更有技术含量,同时可以避免因细节缺失而导致问题潜藏。
学习建议
Python是最容易入门的编程语言,没有之一。如果初学者接触的第一门语言是C或者C++,对他们来说最难的不是语法,而是容易出现内存泄漏、指针等问题。有时候排查这些问题对初学者的打击很大,尤其是没掌握排查BUG技巧时。
如果初学者接触的第一门语言是Python,学习曲线则会平滑得多,掌握一些基本语法和Python内置的数据结构,已经可以上手写一些小工具或者小型应用。这对初学者来说,非常重要。因为学习的过程是一个突破舒适区的过程,会面临很多痛苦,如果学习过程得不到激励,很容易半途而废,类似我们开玩笑说的「从入门到放弃」。Python还有很多优点:上手快,第三方库丰富,资料丰富,很容易做出“可见可得”的应用。比如你要拿C或者C++做web服务,这上手门槛就有点高了。所以很多工科学生,甚至是科班学生会问学了C/C++到底有什么用,因为想上手做一些“可见可得”的应用太难。Python就大不同,你想搞Web开发?上来一个Flask框架立马就撸。想搞点数据分析?上来一个Panda+数据可视化,撸起来轻松愉快甚有快感。想抓取什么数据?你自己基于request撸一个小爬虫采集点网站信息,app信息都不是什么难事。
也是因为这样,学习Python的过程几乎接近“无痛”,有很好的学习正反馈过程,学一点知识就能做一点小东西,能看得到自己成长和进步。安利了这么多好处,来看看学Python分几个阶段吧。
1.基础知识
Python最基本的语言特性和语法:
- 变量
- 数据类型与数据结构
- 输入和输出
- 运算符、表达式、语句
- 控制流(顺序控制,选择控制和循环控制)
- 面向过程编程
- 面向对象编程
- 异常处理
- 组织代码
- 标准库、第三方库
针对面向对象这一块需要重点的讲一下,为什么会有面向对象?以及我们如何设计面向对象系统?这个思考的过程有助于你理解面向对象编程思想。
可以说「一切皆对象」这句话普适性是很强的,大家都在玩的王者农药,里面每一个对战英雄,每一个野怪,每一张地图都是通过面向对象的思想构建起来的。如果一开始你觉得太复杂,大可把用「分而治之」的思想把复杂的对象break down,分解成多个简单合理的对象。任何复杂的系统都可以由若干个简单可靠的系统组成,多个简单可靠的系统有序地组织起来是可以实现强大功能的。举个例子,还拿农药来说,”英雄“是可以作为一个基类的对吧,每个英雄都有血条,移动速度,AD,AP,物防,法扛等等。李白平A后裔一下,这是对象之间的通信(或者说交互)。后裔放大打中李白,李白眩晕,这一系列的触发过程都可以通过面向对象来建模。
在掌握了语法特点,掌握了面向对象的思想之后,我们应该能够在控制台(windows或者mac的命令行)里边实现一个有意思的程序。这个程序应该解决现实生活中的一个实际问题。比如出现一个职位的发布和管理系统。有以下功能。我们可以录入职位信息。保存到文件上。我们还可以加载职位信息。按多种条件去查询,比如按关键字按城市。按薪资范围。按商圈工作年限等等。
在做这个的过程中,自己需要设计一个很好的面向对象系统。也把Python里常用的语言基本特性都用到了。达到这个阶段算是勉强及格了吧,不过仅仅是在语言掌握层面。如果想当一个合格的研发工程师,还需要掌握很多其他技能。
2. 进阶的阶段
现在的开发大部分是基于web的,比如app要调web接口,pc端肯定也要调web接口,所以我们不能光在控制台里面玩。这个时候需要了解,http协议和Python web开发。我们可以重做前面提到的求职发布系统,学习基于Python web如何实现。这个时候你需要实现若干个接口:
用户端:
- 用户注册
- 用户登录
请求首页刷出默认的职位列表
- 筛选职位列表
- 根据城市
- 根据关键字
- 根据薪酬
- 根据工作商圈
- 管理后台:
- 登录
- 发布职位
- 更新职位
- 删除职位
为了实现以上接口,你需要弄清楚什么是GET,什么是POST请求,什么场景下用GET,什么场景用POST。你还需要明白一个Python web开发框架,要明白一个http请求到了web框架之后,框架做了什么事情,如何在里面实现业务逻辑。哪些数据是服务共享的,哪些数据是用户/请求独享的。
此外,应该学会Python如何操作数据库实现增删改查,大部分的任务都离不开增删改查。比如我提到的发布职位就是create的过程,更新就是update,还有删除是delete,读是read。江湖有一个戏称CRUD boy。
如果能顺利度过进阶阶段,你应该能举一反三实现其他类似系统了。比如现在很火的分销,拼团,还有新闻Feeds等等。
好像我没怎么提数据结构和算法,这个要看个人追求。如果你要在最短时间内学会Python开发,恐怕是没时间学好数据结构和算法了,能掌握自带的数据结构用法就行。如果你的学习时间充足,我的建议是一定要学数据结构和算法。为了以后长期的发展,为了人民币,一定要学好数据结构和算法,我简直苦口婆心地劝啊。
3. 工业界经验
最后一个阶段是实际的工业经验。这个阶段,你应该对公司用的基础架构,如RPC,数据库缓存消息系统中间件,烂熟于心。同时应该掌握最基本的系统设计的技巧。知道如何根据一个实际需求,设计一个高可用,高性能高扩展性的系统。
实际上我觉得第一个阶段是最容易的,第二个阶段会碰到一些坑,有时候不好解决。在第二个阶段,你可能需要比较好的自学能力,或者有一个好的学长导师。第三个阶段需要比较体系化的训练和思考。
如果说你的系统设计能力ok,甚至经验丰富,再加上你不错的算法,你肯定有一份好工作,薪资可能说多了显浮夸,但优秀的应届生很多人超过30w,甚至50w已经是常态了。工作3-5年的过百万的也大有人在。
这个时代,程序员虽然辛苦了一点,但无疑碰上最好的时代了。
PS:辛苦是因为知识更新很快,行业发展也很快,逼着程序员也要往前走。保持学习才是从业者的基本素养,而不是掌握某门语言某门技术。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。