常见的Pythonic写法有哪些
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍了常见的Pythonic写法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 交换赋值##不推荐temp =
千家信息网最后更新 2024年11月24日常见的Pythonic写法有哪些
这篇文章主要介绍了常见的Pythonic写法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1. 交换赋值
##不推荐temp = aa = bb = 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 Onlyfirst, *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 1i = 0for item in items: print i, item i += 1# method 2for 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 productfor 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, imapreduce(rf, ifilter(ff, imap(mf, a_list)))*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。
15. 使用any/all函数
##不推荐found = Falsefor item in a_list: if condition(item): found = True breakif 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 onlywith ignored(OSError): os.remove("somefile.txt")
19. 使用 with 处理加锁
##不推荐import threadinglock = threading.Lock()lock.acquire()try: # 互斥操作...finally: lock.release()##推荐import threadinglock = threading.Lock()with lock: # 互斥操作...
感谢你能够认真阅读完这篇文章,希望小编分享的"常见的Pythonic写法有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
推荐
生成
篇文章
字典
对象
文件
方法
生成器
处理
写法
常见
内存
函数
字符
字符串
循环
简洁
价值
兴趣
只有
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全防骗方法图解
石嘴山软件开发要多少钱
列出数据库的表
数据库表在哪命名
金吉森公司通过自建服务器
滨州供应链软件开发价格
apex单排哪个服务器最好打
cnki数据库有哪些资源
网络服务器配置与管理教案
软件开发需要什么学位
菏泽软件开发培训
专业教育直播软件开发怎么做
数据库 文件组
软件开发工作量总价估算方式
安卓app怎么连接云数据库
服务器背板坏了不能开机
软件开发中的要求
网络技术问卷调查
千岛湖阿里巴巴服务器基地
网易战意和共研服务器
路由器拔号上网失败服务器无响应
国外服务器代理软件
vb2010数据库怎么读取记录
启动管理找不到谷歌服务器
全球网络安全竞争研究报告
热门华硕服务器推荐
数据库ldm与sdm
宁波营销网络技术来电咨询
内江软件开发怎么样
网络安全禁毒教育绘画