news 2026/4/20 16:33:37

python 19个值得学习的编程技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 19个值得学习的编程技巧

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

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

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

1. 交换赋值

1

2

3

4

5

6

7

##不推荐

temp=a

a=b

b=a

##推荐

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

2. Unpacking

1

2

3

4

5

6

7

8

9

10

11

##不推荐

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

1

2

3

4

5

6

7

##不推荐

iffruit=="apple"orfruit=="orange"orfruit=="berry":

# 多次判断

##推荐

iffruitin["apple","orange","berry"]:

# 使用 in 更加简洁

4. 字符串操作

1

2

3

4

5

6

7

8

9

10

##不推荐

colors=['red','blue','green','yellow']

result=''

forsincolors:

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

##推荐

colors=['red','blue','green','yellow']

result=''.join(colors)# 没有额外的内存分配

5. 字典键值列表

1

2

3

4

5

6

7

8

9

10

##不推荐

forkeyinmy_dict.keys():

# my_dict[key] ...

##推荐

forkeyinmy_dict:

# my_dict[key] ...

# 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()

# 生成静态的键值列表。

6. 字典键值判断

1

2

3

4

5

6

7

##不推荐

ifmy_dict.has_key(key):

# ...do something with d[key]

##推荐

ifkeyinmy_dict:

# ...do something with d[key]

7. 字典 get 和 setdefault 方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

##不推荐

navs={}

for(portfolio, equity, position)indata:

ifportfolionotinnavs:

navs[portfolio]=0

navs[portfolio]+=position*prices[equity]

##推荐

navs={}

for(portfolio, equity, position)indata:

# 使用 get 方法

navs[portfolio]=navs.get(portfolio,0)+position*prices[equity]

# 或者使用 setdefault 方法

navs.setdefault(portfolio,0)

navs[portfolio]+=position*prices[equity]

8. 判断真伪

1

2

3

4

5

6

7

8

9

10

11

12

13

##不推荐

ifx==True:

# ....

iflen(items) !=0:

# ...

ifitems !=[]:

# ...

##推荐

ifx:

# ....

ifitems:

# ...

9. 遍历列表以及索引

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

##不推荐

items='zero one two three'.split()

# method 1

i=0

foriteminitems:

printi, item

i+=1

# method 2

foriinrange(len(items)):

printi, items[i]

##推荐

items='zero one two three'.split()

fori, iteminenumerate(items):

printi, item

10. 列表推导

1

2

3

4

5

6

7

8

##不推荐

new_list=[]

foritemina_list:

ifcondition(item):

new_list.append(fn(item))

##推荐

new_list=[fn(item)foritemina_listifcondition(item)]

11. 列表推导-嵌套

1

2

3

4

5

6

7

8

9

10

11

##不推荐

forsub_listinnested_list:

iflist_condition(sub_list):

foriteminsub_list:

ifitem_condition(item):

# do something...

##推荐

gen=(itemforslinnested_listiflist_condition(sl) \

foriteminslifitem_condition(item))

foritemingen:

# do something...

12. 循环嵌套

1

2

3

4

5

6

7

8

9

10

##不推荐

forxinx_list:

foryiny_list:

forzinz_list:

# do something for x & y

##推荐

fromitertoolsimportproduct

forx, y, zinproduct(x_list, y_list, z_list):

# do something for x, y, z

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

##不推荐

defmy_range(n):

i=0

result=[]

whilei < n:

result.append(fn(i))

i+=1

returnresult# 返回列表

##推荐

defmy_range(n):

i=0

result=[]

whilei < n:

yieldfn(i)# 使用生成器代替列表

i+=1

*尽量用生成器代替列表,除非必须用到列表特有的函数。

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

1

2

3

4

5

6

7

##不推荐

reduce(rf,filter(ff,map(mf, a_list)))

##推荐

fromitertoolsimportifilter, imap

reduce(rf, ifilter(ff, imap(mf, a_list)))

*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。

15. 使用any/all函数

1

2

3

4

5

6

7

8

9

10

11

12

##不推荐

found=False

foritemina_list:

ifcondition(item):

found=True

break

iffound:

# do something if found...

##推荐

ifany(condition(item)foritemina_list):

# do something if found...

16. 属性(property)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

##不推荐

classClock(object):

def__init__(self):

self.__hour=1

defsetHour(self, hour):

if25> hour >0:self.__hour=hour

else:raiseBadHourException

defgetHour(self):

returnself.__hour

##推荐

classClock(object):

def__init__(self):

self.__hour=1

def__setHour(self, hour):

if25> hour >0:self.__hour=hour

else:raiseBadHourException

def__getHour(self):

returnself.__hour

hour=property(__getHour, __setHour)

17. 使用 with 处理文件打开

1

2

3

4

5

6

7

8

9

10

11

12

##不推荐

f=open("some_file.txt")

try:

data=f.read()

# 其他文件操作..

finally:

f.close()

##推荐

withopen("some_file.txt") as f:

data=f.read()

# 其他文件操作...

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

1

2

3

4

5

6

7

8

9

10

11

##不推荐

try:

os.remove("somefile.txt")

exceptOSError:

pass

##推荐

fromcontextlibimportignored# Python 3 only

with ignored(OSError):

os.remove("somefile.txt")

19. 使用 with 处理加锁

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

##不推荐

importthreading

lock=threading.Lock()

lock.acquire()

try:

# 互斥操作...

finally:

lock.release()

##推荐

importthreading

lock=threading.Lock()

with lock:

# 互斥操作...

以上就是python19个值得学习的编程技巧的详细内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 16:32:27

3分钟学会磁力链接转种子文件:免费命令行工具终极指南

3分钟学会磁力链接转种子文件:免费命令行工具终极指南 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 你是否曾经遇到过磁力链接失效的困扰&#xff1…

作者头像 李华
网站建设 2026/4/20 16:21:16

降AI处理后如何用知网AIGC检测验收:验证达标的正确操作教程

降AI处理后如何用知网AIGC检测验收:验证达标的正确操作教程 这篇教程是帮经常被问到知网AIGC检测验收操作问题的人写的——问得最多的几个坑,都在这里列出来了。 主工具:嘎嘎降AI(www.aigcleaner.com),4.…

作者头像 李华
网站建设 2026/4/20 16:20:15

Dify农业知识库部署后问答失准?手把手教你用日志埋点+语义相似度阈值调优(附12个真实田间场景case)

第一章:Dify农业知识库部署后问答失准问题诊断Dify农业知识库上线后,用户反馈“水稻缺氮典型症状”“玉米螟生物防治方案”等高频农业问题返回答案模糊、信息错位或直接拒答。此类失准并非模型幻觉孤立现象,而是知识注入、检索增强与提示工程…

作者头像 李华