学习Python不畏艰难,但是没有想法怎么办?

文章分享了8个提升Python代码质量的技巧,包括使用enumerate()、列表表达式、set去重、生成器节省内存等,并强调Python作为入门语言的优势。文章建议初学者从基础知识开始,理解面向对象编程,通过实践项目提高技能,进一步学习web开发和数据库操作。提到进阶阶段应掌握数据结构和算法,最后积累工业界经验,以提升系统设计能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学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%免费】。

​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值