你需要知道的5个Python技巧

开发 后端
Python有如此出色的支持网络,似乎一次可以解决很多问题。但初学者可能会对此感到困惑。在这里,笔者列出了5个最有用的代码段,这些代码段进一步提高了笔者的水平,使代码变得更好。

Python有如此出色的支持网络,似乎一次可以解决很多问题。人们应该认识到这是正常现象。

但初学者可能会对此感到困惑。人们可以找到大量资源来解决基础知识问题,但然而呢?要学习哪些资源以不断进步呢?

在这里,笔者列出了5个最有用的代码段,这些代码段进一步提高了笔者的水平,使代码变得更好。

下文将介绍如何在代码中应用这5个代码段。

[[320144]]

1. 列表推导式

有人或许以前听说过这些。Python中的一种编码模式十分常见,因此需要进行修改。使用for循环创建列表是列表推导的价值所在。

列表推导式可读且简洁,也确实需要花费一些时间来了解发生了什么。下面将深入研究是否可以解决这个问题。

创建列表时应考虑列表推导式。列表推导式从一组方括号开始。先不管语法,以便展示两种语言的相似之处

  1. list_comp = [expression for itemin items] 

任务是要替换一个for循环,该循环将项目添加到列表中。

  1. new_list = [] 
  2. for item in old_list: 
  3.     new_list.append(item**2) 

注:

  • 调用名为new_list is calledt
  • for循环遍历旧列表中的项目
  • 使用添加方法将item ** 2添加到新列表中 

目前为止很简单。

列表推导如下所示

  1. new_list = [item**2 for item inold_list] 

注:

  • 将表达式item **2作为要添加到列表中的表达式,这首先出现在列表推导式中。
  • 之后的for循环是要迭代的循环
  • 将其括在方括号中并为其分配变量new_list意味着,为循环的每个项目将表达式item ** 2添加到new_list中。

没有附加方法或是不需要,一行代码正适合!为了选择要添加的内容,甚至可以添加条件语句。此功能还扩展到集合和词典!甚至可以使用嵌套的for循环编写列表推导式!

请注意,可能会出现过度使用的情况!仅当列表循环很简单并且明确要创建列表时,才会使用列表推导。

[[320145]]

2.生成器表达式——节省内存使用量

当拥有大量数据集并需要对其进行迭代或从中获取结果,却无法将所有数据存储在内存中时,应想到生成器函数。除了不返回而为关键字yield进行切换操作,生成器函数非常像一个函数。

生成器函数创建了迭代器,而迭代器需要强制输出它所拥有的值。它们不会在列表或集合中存储对象。一次也只输出一项。这称为延迟循环。因此,读取大文件时使用生成器。

  1. def gen(n):                            
  2.  
  3.    while True: 
  4.  
  5.        yield n 
  6.  
  7.        n += 1                                                      G = gen(3)     # starts at 3 
  8.  
  9. print(next(G)) # 3 
  10.  
  11. print(next(G)) # 4 
  12.  
  13. print(next(G)) # 5 
  14.  
  15. print(next(G)) # 6 

注:

  • 创建函数gen
  • Yield关键字存储值n,一直保留到调用next()方法为止
  • 使用赋值运算符,将1加到n
  • 这是一个无限循环,并一直持续
  • 调用next()方法,它将继续输出值

现在,这些值不会被存储,只有在调用next()方法时才会跳出。生成器创建一个迭代器,然后依赖next()方法输出值。

当有一个大数据集并且想要流式传输数据而不会使内存溢出时,这将很有用。

3. 使用zip迭代两个对象

经常想迭代多个对象,以便能从每个对象中收集数据。Zip是允许执行此操作的函数!如果需要迭代充分理解文件名及其对应的链接,可以这样做。

  1. for file_name, link in zip(names, links): 
  2.  
  3.    print(file_name, link) 

这将同时进入两个对象,返回一个元组以及每个元组中的对应项。在循环中,将元组解压为单独的值file_name和link. zip()。可以根据需要选择任意数量的集合,但是当最短的集合用尽时它将停止。

通过本文提及的列表推导式,Zip函数可用于迭代同一对象中的成对元素。

例如:

  1. differences = [next_el - elt for el, next_el in zip(items, items[1:]) 

4. 计数器——生成对象的计数

[[320146]]

来源:Pexels

计数器是字典的一个子类,其中对象的元素是键,而对象中项目的计数是值。它对计算对象的数量有效。访问计数器时需要导入内置的collections模块。

假设要计算列表中所有出现的字符串。

  1. import collections 
  2. counts = Counter([ Fred ,  Samantha ,  Jean-Claude ,  Samantha ]) 
  3. print(counts) 

输出:

  1. Counter({ Samantha : 2,  Fred :1,  Jean-Claude : 1}) 

计数器类的优点是可以对其进行更新,并且可以使用字典API来访问值。

  1. from collections import Counter 
  2. c = Counter( abcdaab )for letter in  abcde : 
  3.     print(letter, : , c[letter]) 

输出:

  1. a : 3 
  2. b : 2 
  3. c : 1 
  4. d : 1 
  5. e : 0 

注:

  • 使用字符串“ abcdaab”将c分配给Counter子类。计数器类提供每个字符的单独计数。c [item]可以像字典一样被访问。
  • for循环,用于迭代字符串“abcde”,并为每个字符串分配letter。
  • 输入字符串字符,打印可变letter并可以像字典一样。每个字母的计数由c [letter]访问。

5. 链接多个集合

[[320147]]

来源:Pexels

如需一次迭代多个集合,则itertools模块中的链接方法是实现这一目标的好方法。

  1. for name in itertools.chain(first_name_list, second_name_list): 
  2.  
  3.   create_person(name) 

在耗尽之前,这将迭代第一个集合,然后继续进行下一个,依此类推。

希望您喜欢这篇文章。

 

责任编辑:赵宁宁 来源: 读芯术
相关推荐

2023-01-09 17:23:14

CSS技巧

2013-03-04 09:34:48

CSSWeb

2024-04-03 10:29:13

JavaScrip优化技巧

2018-09-10 09:26:33

2022-07-06 15:51:48

浏览器开发者工具

2023-03-19 16:02:33

JavaScrip技巧编程语言

2023-03-31 08:10:50

2022-12-12 13:19:11

Vue3开发技巧

2019-12-09 16:41:40

5G运营商韩国

2022-04-28 12:17:26

浏览器连字符hyphens

2021-12-08 23:38:25

Python工具代码

2019-10-25 08:50:36

Windows 10技巧窍门

2011-09-20 10:56:35

云计算PaaS

2022-04-29 09:00:00

Platform架构内核线程

2022-08-10 09:03:35

TypeScript前端

2013-07-11 13:56:37

大数据

2023-07-11 09:07:49

数组Promise方法

2013-12-26 10:10:52

Python

2019-05-30 09:22:06

5G网络互联网

2015-09-20 16:23:27

点赞
收藏

51CTO技术栈公众号