值得收藏!python 19个编程技巧

本文介绍了Python编程中的一些最佳实践,包括代码可读性、高效赋值、元组解包、操作符优化、字符串和字典操作、判断技巧、列表推导、生成器使用、异常处理和资源管理,为Python初学者和进阶者提供了实用的学习路径和编码建议。

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


前言

Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。
在这里插入图片描述

0. 程序必须先让人读懂,然后才能让计算机执行。

“Programs must be written for people to read, and only incidentally for machines to execute.”

1. 交换赋值

##不推荐
temp = a
a = b
b = a 

##推荐
a, b = b, a # 先生成一个元组(tuple)对象,然后unpack

2. Unpacking

##不推荐
l = \['David', 'Pythonista', '+1-514-555-1234'\]
first\_name = l\[0\]
last\_name = l\[1\]
phone\_number = l\[2\] 

##推荐
l = \['David', 'Pythonista', '+1-514-555-1234'\]
first\_name, last\_name, phone\_number = l
# Python 3 Only
first, \*middle, last = another\_list

3. 使用操作符in

##不推荐
if fruit == "apple" or fruit == "orange" or fruit == "berry":
# 多次判断 

##推荐
if fruit in \["apple", "orange", "berry"\]:
# 使用 in 更加简洁

4. 字符串操作

##不推荐
colors = \['red', 'blue', 'green', 'yellow'\]

result = ''
for s in colors:
result += s # 每次赋值都丢弃以前的字符串对象, 生成一个新对象 

##推荐
colors = \['red', 'blue', 'green', 'yellow'\]
result = ''.join(colors) # 没有额外的内存分配

5. 字典键值列表

##不推荐
for key in my\_dict.keys():
# my\_dict\[key\] ... 

##推荐
for key in my\_dict:
# my\_dict\[key\] ...

# 只有当循环中需要更改key值的情况下,我们需要使用 my\_dict.keys()
# 生成静态的键值列表。

6. 字典键值判断

##不推荐
if my\_dict.has\_key(key):
# ...do something with d\[key\] 

##推荐
if key in my\_dict:
# ...do something with d\[key\]

7. 字典 get 和 setdefault 方法

##不推荐
navs = {}
for (portfolio, equity, position) in data:
if portfolio not in navs:
navs\[portfolio\] = 0
navs\[portfolio\] += position \* prices\[equity\]
##推荐
navs = {}
for (portfolio, equity, position) in data:
# 使用 get 方法
navs\[portfolio\] = navs.get(portfolio, 0) + position \* prices\[equity\]
# 或者使用 setdefault 方法
navs.setdefault(portfolio, 0)
navs\[portfolio\] += position \* prices\[equity\]

8. 判断真伪

##不推荐
if x == True:
# ....
if len(items) != 0:
# ...
if items != \[\]:
# ... 

##推荐
if x:
# ....
if items:
# ...

9. 遍历列表以及索引

##不推荐
items = 'zero one two three'.split()
# method 1
i = 0
for item in items:
print i, item
i += 1
# method 2
for i in range(len(items)):
print i, items\[i\]

##推荐
items = 'zero one two three'.split()
for i, item in enumerate(items):
print i, item

10. 列表推导

##不推荐
new\_list = \[\]
for item in a\_list:
if condition(item):
new\_list.append(fn(item)) 

##推荐
new\_list = \[fn(item) for item in a\_list if condition(item)\]

11. 列表推导-嵌套

##不推荐
for sub\_list in nested\_list:
if list\_condition(sub\_list):
for item in sub\_list:
if item\_condition(item):
# do something... 
##推荐
gen = (item for sl in nested\_list if list\_condition(sl) \\
for item in sl if item\_condition(item))
for item in gen:
# do something...

12. 循环嵌套

##不推荐
for x in x\_list:
for y in y\_list:
for z in z\_list:
# do something for x & y 

##推荐
from itertools import product
for x, y, z in product(x\_list, y\_list, z\_list):
# do something for x, y, z

13. 尽量使用生成器代替列表

##不推荐
def my\_range(n):
i = 0
result = \[\]
while i < n:
result.append(fn(i))
i += 1
return result # 返回列表

##推荐
def my\_range(n):
i = 0
result = \[\]
while i < n:
yield fn(i) # 使用生成器代替列表
i += 1
\*尽量用生成器代替列表,除非必须用到列表特有的函数。

14. 中间结果尽量使用imap/ifilter代替map/filter

##不推荐
reduce(rf, filter(ff, map(mf, a\_list)))

##推荐
from itertools import ifilter, imap
reduce(rf, ifilter(ff, imap(mf, a\_list)))
\*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。

15. 使用any/all函数

##不推荐
found = False
for item in a\_list:
if condition(item):
found = True
break
if found:
# do something if found... 

##推荐
if any(condition(item) for item in a\_list):
# do something if found...

16. 属性(property)

##不推荐
class Clock(object):
def \_\_init\_\_(self):
self.\_\_hour = 1
def setHour(self, hour):
if 25 > hour > 0: self.\_\_hour = hour
else: raise BadHourException
def getHour(self):
return self.\_\_hour

##推荐
class Clock(object):
def \_\_init\_\_(self):
self.\_\_hour = 1
def \_\_setHour(self, hour):
if 25 > hour > 0: self.\_\_hour = hour
else: raise BadHourException
def \_\_getHour(self):
return self.\_\_hour
hour = property(\_\_getHour, \_\_setHour)

17. 使用 with 处理文件打开

##不推荐
f = open("some\_file.txt")
try:
data = f.read()
# 其他文件操作..
finally:
f.close()

##推荐
with open("some\_file.txt") as f:
data = f.read()
# 其他文件操作...

18. 使用 with 忽视异常(仅限Python 3)

##不推荐
try:
os.remove("somefile.txt")
except OSError:
pass

##推荐
from contextlib import ignored # Python 3 only

with ignored(OSError):
os.remove("somefile.txt")

19. 使用 with 处理加锁

##不推荐
import threading
lock = threading.Lock()

lock.acquire()
try:
# 互斥操作...
finally:
lock.release()

##推荐
import threading
lock = threading.Lock()

with lock:
# 互斥操作...


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,希望提供给想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值