全文共2330字,预计学习时长11分钟

图源:unsplash

本文将介绍8个简洁的Python技巧,若非经验十足的程序员,你肯定有些从未见过。向着更简洁更高效,出发吧!

1.通过多个键值将对象进行排序

假设要对以下字典列表进行排序:

people = [

{ 'name': 'John', "age": 64 },

{ 'name': 'Janet', "age": 34 },

{ 'name': 'Ed', "age": 24 },

{ 'name': 'Sara', "age": 64 },

{ 'name': 'John', "age": 32 },

{ 'name': 'Jane', "age": 34 },

{ 'name': 'John', "age": 99 },

]

不仅要按名字或年龄对其进行排序,还要将两个字段同时进行排序。在SQL中,会是这样的查询:

SELECT * FROM people ORDER by name, age

实际上,这个问题的解决方法可以非常简单,Python保证sort函数提供了稳定的排序顺序,这也意味着比较相似的项将保留其原始顺序。要实现按名字和年龄排序,可以这样做:

import operator

people.sort(key=operator.itemgetter('age'))

people.sort(key=operator.itemgetter('name'))

要注意如何反转顺序。首先按年龄分类,然后按名字分类,使用operator.itemgetter()从列表中的每个字典中获取年龄和名字字段,这样你就会得到想要的结果:

[

{'name': 'Ed', 'age': 24},

{'name': 'Jane', 'age': 34},

{'name': 'Janet','age': 34},

{'name': 'John', 'age': 32},

{'name': 'John', 'age': 64},

{'name': 'John', 'age': 99},

{'name': 'Sara', 'age': 64}

]

名字是主要排序项,如果姓名相同,则以年龄排序。因此,所有John都按年龄分组在一起。

2.数据类别

自3.7版之后,Python开始能提供数据类别。比起常规类或其他替代方法(如返回多个值或字典),它有着更多优点:

· 数据类需要很少的代码

· 可以比较数据类,因为 __eq__ 可以实现此功能

· 数据类需要类型提示,减少了发生错误的可能性

· 可以轻松打印数据类以进行调试,因为__repr__可以实现此功能

这是一个工作中的数据类示例:

from dataclasses import dataclass

@dataclass

classCard:

rank: str

suit: str

card=Card("Q", "hearts")

print(card == card)

# True

print(card.rank)

# 'Q'

print(card)

Card(rank='Q', suit='hearts')

3.列表推导

列表推导可以在列表填写里代替讨厌的循环,其基本语法为

[ expression for item in list if conditional ]

来看一个非常基本的示例,用数字序列填充列表:

mylist = [i for i inrange(10)]

print(mylist)

# [0, 1, 2, 3,4, 5, 6, 7, 8, 9]

因为可以使用表达式,所以你还可以进行一些数学运算:

squares = [x**2for x inrange(10)]

print(squares)

# [0, 1, 4, 9,16, 25, 36, 49, 64, 81]

甚至能调用外部函数:

defsome_function(a):

return (a +5) /2

my_formula= [some_function(i) for i inrange(10)]

print(my_formula)

# [2.5, 3.0,3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0]

最后,可以使用if函数来筛选列表。在这种情况下,只保留可被2除的值:

filtered = [i for i inrange(20) if i%2==0]

print(filtered)

# [0, 2, 4, 6,8, 10, 12, 14, 16, 18]

4.检查对象的内存使用情况

使用sys.getsizeof()可以检查对象的内存使用情况:

import sys

mylist =range(0, 10000)

print(sys.getsizeof(mylist))

# 48

为什么这个庞大的列表只有48个字节?这是因为range函数返回的类表现为列表。与使用实际的数字列表相比,数序列的存储效率要高得多。我们可以通过列表推导来创建相同范围内的实际数字列表:

import sys

myreallist = [x for x inrange(0, 10000)]

print(sys.getsizeof(myreallist))

# 87632

通过使用sys.getsizeof(),我们可以了解更多关于Python和内存使用情况的信息。

5.查找最频繁出现的值

要查找列表或字符串中最频繁出现的值:

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]

print(max(set(test), key = test.count))

# 4

· max()将返回列表中的最大值。key参数采用单个参数函数自定义排序顺序,在本例中为test.count,该函数适用于迭代器上的每个项目。

· test.count是list的内置功能。它接受一个参数,并计算该参数的出现次数。因此test.count(1)将返回2,而test.count(4)将返回4。

· set(test)返回test中的所有唯一值,所以{1、2、3、4}

那么在这一行代码将接受test的所有唯一值,即{1、2、3、4}。接下来,max将对其应用list.count 函数并返回最大值。

还有一种更有效的方法:

from collections import Counter

Counter(test).most_common(1)

# [4: 4]

6.属性包

图源:unsplash

你可以使用attrs代替数据类,选择attrs有两个原因:

· 使用的Python版本高于3.7

· 想要更多功能

Theattrs软件包支持所有主流Python版本,包括CPython 2.7和PyPy。一些attrs可以提供验证器和转换器这种超常规数据类。来看一些示例代码:

@attrs

classPerson(object):

name =attrib(default='John')

surname =attrib(default='Doe')

age =attrib(init=False)

p =Person()

print(p)

p=Person('Bill', 'Gates')

p.age=60

print(p)

# Output:

# Person(name='John', surname='Doe',age=NOTHING)

# Person(name='Bill', surname='Gates', age=60)

实际上,attrs的作者已经在使用引入数据类的PEP了。数据类被有意地保持得更简单、更容易理解,而attrs 提供了可能需要的所有特性。

7.合并字典(Python3.5+)

从Python 3.5开始,合并字典变得更加容易:

dict1 = { 'a': 1, 'b': 2 }

dict2= { 'b': 3, 'c': 4 }

merged= { **dict1, **dict2 }

print (merged)

# {'a': 1, 'b':3, 'c': 4}

如果有重叠的键,第一个字典中的键将被覆盖。在Python 3.9中,合并字典变得更加简洁。上面Python 3.9中的合并可以重写为:

merged = dict1 | dict2

8.返回多个值

Python中的函数在没有字典,列表和类的情况下可以返回多个变量,它的工作方式如下:

defget_user(id):

# fetch user from database

# ....

return name, birthdate

name, birthdate =get_user(4)

这是有限的返回值,但任何超过3个值的内容都应放入一个(数据)类。

这8个小技巧足够你好好消化一阵儿啦!

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

python大型项目经验_经验丰富程序员才知道的8种高级Python技巧相关推荐

  1. 经验丰富程序员才知道的15种高级Python小技巧

    本文将介绍15个简洁的Python技巧,向着简洁更高效,学习易懂出发. 目录 1.通过多个键值将对象进行排序 2.数据类别 3.列表推导 4.检查对象的内存使用情况 5.查找最频繁出现的值 6.属性包 ...

  2. 资深程序员才知道的30个Python技巧

    Python中的省略号 Python省略号是三点序列,通常在自然语言中使用.但是您可能不知道的是,这也是Python中的有效对象: - Ellipsis 它主要用于NumPy中的矩阵切片操作.但是,您 ...

  3. Java程序员应该知道的10个Eclipse调试技巧

    为什么80%的码农都做不了架构师?>>>    Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条 ...

  4. python怎么开发工具_为程序员和新手准备的8大Python开发工具

    Python 是一种开源编程语言,用于 Web 编程.数据科学.人工智能和许多科学应用.学习 Python 使程序员能够专注于解决问题,而不是专注于语法,其丰富的库赋予它完成伟大任务所需的力量. 1) ...

  5. 老鸟程序员才知道的40个小技巧

    1.重构是程序员的主力技能. 2.工作日志能提升脑容量. 3.先用profiler调查,才有脸谈优化. 4.注释贵精不贵多.杜绝大姨妈般的"例注".漫山遍野的碎碎念注释,实际就是背 ...

  6. 有什么事是你当了程序员才知道的? | 每日趣闻

    戳一戳小程序查看更多! 往 期 趣 闻 ☞人间真实!如果我有这套装备,我也能码到凌晨...... | 每日趣闻 ☞我酸了~腾讯员工平均月薪 7.6 万 | 每日趣闻 ☞光棍节刚过,你脱单了吗?| 每日 ...

  7. python大型项目经验_图像分类:13个Kaggle项目的经验总结

    来源:数据派THU 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类也不例外,工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践. 在这 ...

  8. word文档打印 自动编码_职场老油条才知道的3个Word打印技巧,一年能节省几百张打印纸!...

    在我们平时工作中经常需要打印一些Word文档,如果你的文档并不是要提交给老板和客户,仅是私人查阅或内部的交流.那么,下面的这几个打印小技巧,能为你节省很多纸张,甚至省不少钱. 例如,当Word文档最后 ...

  9. Python 程序员需要知道的 30 个技巧(转载)

    Python 程序员需要知道的 30 个技巧 原创2017-04-14 伯乐专栏/阿喵 Python开发者 Python开发者 Python开发者 微信号 PythonCoder 功能介绍 人生苦短, ...

最新文章

  1. Python:机器视觉与Tesseract介绍
  2. eclipse从数据库逆向生成Hibernate实体类
  3. 快速搭建一个restful风格的springboot项目
  4. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)
  5. blob转file对象_JavaScript Blob 对象解析
  6. matlab 高斯模糊_摸鱼 | 茴香豆的“茴”有四种写法,模糊有几种糊法?
  7. jquery通过attr取html里自定义属性原来这么方便啊
  8. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
  9. 把你的火狐浏览器改成Chrome样式
  10. HTML简介及常用标签介绍
  11. C语言计算星历位置,GPS广播星历计算卫星位置和速度
  12. Vue--改变鼠标指针的图片
  13. 【搞定Go语言】第3天22:常用的HTTP服务压测工具介绍
  14. 淘宝签名分析之一(反编译和利用frida快速找点)
  15. Dragonfly 修改数据像素点大小
  16. Ant Design Vue+vue2.x图片上传数量限制(亲测有效)
  17. php户型图识别,5分钟教你马上看懂户型图
  18. 怎样黑进Microsoft:循序渐进指南 (转)
  19. C#Mysql学生信息管理系统
  20. 网络入侵防御系统全解

热门文章

  1. 使用url参数传递SAP Analytics Cloud filter的一个例子
  2. SAP CRM的WITH_INDOBJECTS搜索参数问题
  3. Betty's Sales team BP SQL
  4. CRM attachment read old API debug
  5. engagement center tile的配置
  6. SAP Fiori element框架smart control运行时的生成原理
  7. ButtonRenderer
  8. Postman里如何把某个HTTP的请求和响应作为example保存
  9. CRM订单状态的Open, In process和Completed这些条目是从哪里来的
  10. OpenFOAM并行计算方法