Python有什么高级技巧

  介绍

小编这次要给大家分享的是Python有什么高级技巧,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

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

 Python有什么高级技巧

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

 

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

 SELECT *从订单的人的名字,年龄

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

进口经营者   people.sort(关键=operator.itemgetter(& # 39;年龄# 39;))   people.sort(关键=operator.itemgetter(& # 39;名字# 39;))

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

(   {& # 39;名字# 39;:& # 39;ed # 39;, & # 39;年龄# 39;:24},   {& # 39;名字# 39;:& # 39;简# 39;,& # 39;年龄# 39;:34},   {& # 39;名字# 39;:& # 39;珍妮特# 39;,& # 39;年龄# 39;:34},   {& # 39;名字# 39;:& # 39;约翰# 39;,& # 39;年龄# 39;:32},   {& # 39;名字# 39;:& # 39;约翰# 39;,& # 39;年龄# 39;:64},   {& # 39;名字# 39;:& # 39;约翰# 39;,& # 39;年龄# 39;:99},   {& # 39;名字# 39;:& # 39;莎拉# 39;,& # 39;年龄# 39;:64}   )

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

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

    <李>数据类需要很少的代码李 <李>可以比较数据类,因为__eq__可以实现此功能李 <>李数据类需要类型提示,减少了发生错误的可能性李 <李>可以轻松打印数据类以进行调试,因为__repr__可以实现此功能李

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

  @dataclass
  classCard:
  排名:str
  适合:str
  卡=卡(“Q",“hearts")
  打印(卡==卡)
  #真正的
  打印(card.rank)
  # & # 39;提问# 39;
  打印(卡)
  卡(排名=& # 39;提问# 39;,西装=& # 39;心# 39;)

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

(如果条件表达式列表项的)

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

mylist=(我对inrange (10))   打印(mylist)   # (0,1,2,3,4,5,6,7,8,9)

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

方块=[x * * 2 x inrange (10))
  打印(广场)
  #(0、1、4、9、16、25岁,36岁,49岁,64年,81年)

甚至能调用外部函数:

defsome_function(一个):   返回(+ 5)/2      my_formula=[some_function(我)我inrange (10))   打印(my_formula)   # (2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0)

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

导入系统
  mylist=范围(0,10000)
  print (sys.getsizeof (mylist))
  # 48 

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

导入系统
  myreallist=[x x inrange (0, 10000))
  print (sys.getsizeof (myreallist))
  # 87632 

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

Python有什么高级技巧