千家信息网

常见的Pythonic写法有哪些

发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,这篇文章主要介绍了常见的Pythonic写法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 交换赋值##不推荐temp =
千家信息网最后更新 2024年10月09日常见的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安全错误 数据库的锁怎样保障安全 电力系统网络安全措施 思络网络技术有限公司 软件开发如何做到月薪2万 南京农业大学有wind数据库吗 抚顺网络安全培训 自己组建个服务器有啥用 汽车网络安全工程师与算法工程师 网络安全法最新司法解释 临床数据库发表sci 湛江市总工会网络安全 idc网络安全厂家市值对比 少儿编程网络安全专家评论 内网服务器如何发送邮件 数据库与用户交流最好的界面 办公系统和业务系统软件开发 网吧网络安全员证书 什么做兼职的软件开发 云南电力网络技术有限公司 软件开发专科可以直接考研吗 服务器能办理航空托运么 管理电脑 服务器套定额 宝山区管理软件开发要多少钱 电脑上哪里可以玩神奇宝贝服务器 河北吉娜软件开发公司 pc软件开发环境 网络技术地址分类用填类么 数据库在linux怎么启动 表单图文混合存入数据库 机关网络安全工作打算 淮北政务软件开发报价
0