|
|
51CTO旗下网站
|
|
移动端

Python很重要的5大功能,要是能早点了解就好了!

Python作为近几年超级热门的新兴编程语言,其语言功能十分强大的特点,大家有目共睹,想必不用赘述。

作者:读芯术来源:读芯术|2020-01-13 12:27

Python作为近几年超级热门的新兴编程语言,其语言功能十分强大的特点,大家有目共睹,想必不用赘述。

Python功能众多,小芯曾用Python的交互式地图和区块链等功能创建了许许多多的应用程序,令人振奋。

但也正因其功能繁多,初学者一开始是很难掌握所有功能的。

即使你是一名从其他语言(比如C语言或MATLAB语言)转换过来的程序员,用更加抽象的Python编写代码对你来说也绝对是一次不同的体验。

但功能虽多,总有主次之分。

为了方便大家早点了解Python的一些大功能,小芯特别整理出了其中5大很重要的功能。

1. 生成器——内存效率

打算计算大量的结果,但同时又想避免同时分配所有结果所需内存,这时候会使用生成器。换句话说,它们即时生成值,但不会将先前生成的值存储在内存中,因此只需要将其迭代一次。 生成器常用于读取大型文件或使用关键字yield生成无穷序列。在大多数数据科学项目中,笔者发现它颇有用处。

  1. def  gen(n):    # an infinite sequence  generator that generates integers >= n 
  2.     while True
  3.         yield n 
  4.         n += 1 
  5. G =  gen(3)     # starts at 3 
  6. print(next(G))  # 3 
  7. print(next(G))  # 4 
  8. print(next(G))  # 5 
  9. print(next(G))  # 6 

python-generator hosted with ❤ by GitHub

2. 虚拟环境——隔离

若读完本文,只能记住其中一条,那应该是虚拟环境的使用。

Python的应用程序经常使用很多不同的软件包,而这些软件包由具有复杂依赖关系的开发人员开发。不同的应用程序由一种特定的库设置开发出来,其结果无法由其他版本的库复制。没有一种安装程序可以满足所有应用程序的要求。

  1. conda create -n venv pippython=3.7  # select python version 
  2. source activate venv 
  3. ... 
  4. source deactivate 

因此,为每个应用程序创建单独的虚拟环境venv至关重要,可以用 pip或conda完成。

3. 列表推导——紧致码

很多人认为lambda、map和filter是每个初学者都应该学习的函数。虽然笔者认为这些函数值得关注,但是由于它们缺乏灵活性,大多时候不是特别有用。 Lambda是将一次性使用的函数生成为一行的方法。若函数被多次调用,性能就会降低。另一方面,map将一种函数应用于列表中的所有元素,而filter则会获取集合中满足用户定义条件的元素子集。

  1. add_func  = lambda z: z ** 2 
  2. is_odd =  lambda z: z%2 == 1 
  3. multiply  = lambda x,y: x*y 
  4. aList =  list(range(10)) 
  5. print(aList) 
  6. # [0, 1,  2, 3, 4, 5, 6, 7, 8, 9] 

python-lambda hosted with ❤ by GitHub

列表推导是一种简洁灵活的方法,可从其他具有灵活表达式和条件的列表中创建新列表。它由一个带有表达式或函数的方括号构成,只有当元素满足特定条件时,才能应用于列表中的每个元素。它也可以通过嵌套来处理嵌套列表,这比用map和filter要灵活得多。

  1. # Syntax of list comprehension 
  2. [ expression(x) for x in aList if optional_condition(x)]  
  1. print(list(map(add_func,  aList))) 
  2. print([x  ** 2 for x in aList]) 
  3. # [0, 1,  4, 9, 16, 25, 36, 49, 64, 81] 
  4. # [0, 1,  4, 9, 16, 25, 36, 49, 64, 81] 
  5. print(list(filter(is_odd,  aList))) 
  6. print([x  for x in aList if x%2 == 1]) 
  7. # [1, 3,  5, 7, 9] 
  8. # [1, 3,  5, 7, 9] 

python-list-comprehension hosted with ❤ by GitHub

4. 列表操作——循环列表

Python允许在aList[-1]== aList[len(aList)-1]中出现负索引。因此,可以通过调用aList[-2]等其他元素来获取列表中的倒数第二个元素。

还可以用aList[start:end:step]语法对列表进行切片,该语法包括起始元素,但不包括终止元素。因此,调用aList[2:5]会得到[2, 3, 4]。也可以通过调用aList[::-1]来反转列表,笔者发现这种技巧非常简洁。

列表也可以解压缩为单独的元素,或者解压缩为元素和子列表,两者混在一起,用星号标出。

  1. a, b, c,  d = aList[0:4] 
  2. print(f'a  = {a}, b = {b}, c = {c}, d = {d}'
  3. # a = 0,  b = 1, c = 2, d = 3 
  4. a, *b,  c, d = aList 
  5. print(f'a  = {a}, b = {b}, c = {c}, d = {d}'
  6. # a = 0,  b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 

python-unpacking hosted with ❤ by GitHub

5. 压缩(Zipping)和列举(enumerate) ——for循环

压缩 (Zip)函数创建了一种迭代程序,该程序可聚合来自多个列表的元素。它允许在for循环中并行遍历列表并进行并行分类。用星号即可将其解压缩。

  1. numList  = [0, 1, 2] 
  2. engList  = ['zero''one''two'
  3. espList  = ['cero''uno''dos'
  4. print(list(zip(numList,  engList, espList))) 
  5. # [(0,  'zero''cero'), (1, 'one''uno'), (2, 'two''dos')] 
  6. for num,  eng, esp in zip(numList, engList, espList): 
  7.     print(f'{num} is {eng} in English and  {esp} in Spanish.'
  8. # 0 is  zero in English and cero in Spanish. 
  9. # 1 is  one in English and uno in Spanish. 
  10. # 2 is  two in English and dos in Spanish. 

python-zip-1 hosted with ❤ by GitHub

  1. Eng =  list(zip(engList, espList, numList)) 
  2. Eng.sort()  # sort by engList 
  3. a, b, c  = zip(*Eng) 
  4. print(a) 
  5. print(b) 
  6. print(c) 
  7. #  ('one''two''zero'
  8. #  ('uno''dos''cero'
  9. # (1, 2,  0) 

乍一看,列举(Enumerate) 可能有点吓人,但是后来就会发现,在很多情况下使用列举都很方便。它是一种经常用于for循环的自动计数器,因此无需在counter = 0 和counter += 1的情况下创建并初始化变量计数器。列举(enumerate) 和压缩(zip)是创建for循环时会用到的两种功能很强大的工具。

  1. upperCase  = ['A''B''C''D''E''F'
  2. lowerCase  = ['a''b''c''d''e''f'
  3. for i,  (upperlowerin enumerate(zip(upperCase, lowerCase), 1): 
  4.     print(f'{i}: {upper} and {lower}.'
  5. # 1: A  and a. 
  6. # 2: B  and b. 
  7. # 3: C  and c. 
  8. # 4: D  and d. 
  9. # 5: E  and e. 
  10. # 6: F  and f. 

python-enumerate hosted with ❤ by GitHub

当然,除了这5种功能,Python还有许许多多其他好用的功能,欢迎大家给小芯留言自己最感兴趣的功能。根据大家的留言,小芯会在下次Python文章中继续为大家介绍更多大家感兴趣的功能~

【编辑推荐】

  1. 11 个优秀的 Python 编译器和解释器
  2. 使用一行Python代码从图像读取文本
  3. 如何借助Django来编写一个Python Web API
  4. 现代编程语言哪家强?2020年,你或许应该了解这7门编程语言
  5. 如何打造“智能助理”?阿里对话开发平台这样做
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Python应用场景实战手册

Python应用场景实战手册

Python应用场景实战手册
共3章 | KaliArch

115人订阅学习

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

182人订阅学习

云架构师修炼手册

云架构师修炼手册

云架构师的必备技能
共3章 | Allen在路上

131人订阅学习

读 书 +更多

SUN Solaris 9/10系统管理员认证指南

本书专门根据SUN官方的SCSA for Solaris 9&10考试大纲撰写而成,全面覆盖了SCSA for Solaris 9/10的认证考点,除此之外本书还有大量的非考...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微