常见的Pythonic写法有哪些
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要介绍了常见的Pythonic写法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 交换赋值##不推荐temp =
千家信息网最后更新 2025年02月19日常见的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安全错误
数据库的锁怎样保障安全
access示例数据库
站群服务器防止假墙
甘肃智慧医养软件开发哪儿好
网络技术对艺术
科技互联网城市
怎么利用云服务器让手机免费上网
360安全云盘服务器升级
汽车网络安全简介
市网络安全企业联盟
手机方舟服务器创建
校园网络安全知识培训
网络安全周宣传海报原图
网络安全工渗透
idea怎么连接云服务器项目
计算机网络技术 微盘
四川服务器阵列卡启动云空间
web服务器有必要安装sql吗
网络安全会议制度
网络安全 展馆
阿里服务器架构
公司软件开发北京
学习计算机网络技术需要电脑吗
上海游驰网络技术 官网
喜迎20大网络安全征文
国家网络安全宣传组实施方案
985软件开发本科生
hive连接到数据库
台州手机软件开发怎么样
数据库软件必须国产化吗
甘肃广电网络安全