|
|
51CTO旗下网站
|
|
移步端
  • 这5个Python特色,后悔没早知道

    表现近 10 年才崛起的编程语言,Python 已把证明是一种特别强大的语言。副交互式映射到区块链,我用 Python 构建过许多用到程序。

    笔者:Eden Au 来源:架构头条| 2020-01-09 12:11

    这5个Python特性,后悔没早知道

    表现近 10 年才崛起的编程语言,Python 已把证明是一种特别强大的语言。副交互式映射到区块链,我用 Python 构建过许多用到程序。

    对初学者而言,Python 官方有许多特性很难一开始就掌握。

    即使你是副其它语言转换过来的程序员,用 Python 拓展更高级别的泛编码绝对是另一种体验。局部 Python 特色,我期望自己能早点知道。

    本文将介绍他 5 个最重要的性状。

    1. 列表推导式:代码更紧密

    有的是人口觉得,lambda、map和filter是初学者应该首先掌握的 Python“技术”。虽然我也觉得应关注这些功能,但由于它们缺乏灵活性。

    实际上,它们在大部分情况下并不是异样有用!

    Lambda是一种在1列中编写一个一次性使用的函数的主意。一旦函数被多次调用,性能将受到影响。

    一边,map 可以将一个函数应用于列表中的所有元素,而 filter 能获取集合中满足用户自定义条件的要素子集。

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

    列表推导式是一番简洁而灵活的主意,他利用灵活的格式和规范通过另外列表来创造新列表。

    他用方括号来构造,带有一个表达式或函数,只有当列表中的元素满足某个条件时,该表达式或函数才作用于列表中的每个元素。

    并且,他还能用嵌套来处理嵌套列表,并且这会比使用map和filter更灵活。

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

    载入地址:python-list-comprehension.py

    https://gist.github.com/edenau/148a56e624297addcbceb1805c2d4554#file-python-list-comprehension-py

    2. 列表操作:贯彻列表的流向操作

    Python兴许利用反向索引,其中aList[-1] == aList[len(aList)-1] 。故此,咱们可以通过调用aList[-2] 来获取列表的底数第二个因素。

    咱们还能利用 aList[start:end:step] 语法来对列表进行切片,其中起始元素包含在内,停止元素不包含在内(即 [start,end) 大幅度为 step 的明天闭后开区间)。

    故此,租用 aList[2:5] 会得到 [2, 3, 4]。咱们也能通过调用 aList[::-1] 来反转列表,这种技术非常优雅。

    另外,也得以将列表拆分成单独的要素,或者采取星号将列表拆分成单个元素和子列表的混合形式。

          
    1. a, b, c, d = aList[0:4]print(f'a = {a}, b = {b}, c = {c}, d = {d}')# a = 0, b = 1, c = 2, d = 3 
    2. a, *b, c, d = aListprint(f'a = {a}, b = {b}, c = {c}, d = {d}')# a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 
    3. 载入地址:python-unpacking.py 

    https://gist.github.com/edenau/da1e354a509d4129db47545f44a5028d#file-python-unpacking-py

    3. 调减和枚举:for 循环更富有

    Zip 函数会创建一个 迭代器,且该迭代器可以对来自多个列表的要素进行聚合。用他可以在 for 循环中对列表进行并行遍历和排序。

    用星号对他进行解压。

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

    载入地址:python-zip-1.py

    https://gist.github.com/edenau/f159058e3d1763ea2ec8cd792e4a8280#file-python-zip-1-py

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

    载入地址:python-zip-2.py

    https://gist.github.com/edenau/4a2b984cf78daae9fc8ba57a3b0a843b#file-python-zip-2-py

    起来时, Enumerate 看上去有点吓人,但在许多情况下使用它无疑能从容很多。

    他是一番自动计数器,普通会在 for 循环中采用它,这样就不需要再用 counter = 0 和  counter += 1 来创造和初始化计数器了。枚举和削减是两个组织 for 循环的最强工具。

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

    载入地址:python-enumerate.py

    https://gist.github.com/edenau/34fabb07f38dde6b186724f85bd1e7b8#file-python-enumerate-py

    4. 玉器:内存更便捷

    顶我们想要对一个大的结果集进行计算,但又不想为整个结果数据同时分配内存时,咱们就足以运用石器(Generator)了。

    扭亏增盈,他会动态地转移值,并且不会将先前的值存储在内存中,故此我们只能对它们进行一次迭代操作。

    顶读取大文件或利用关键字 yield 浮动无穷数列时,普通会用他。我发现在我之绝大多数数目科学项目中,他都能发挥很大作用。

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

    载入地址:python-generator.py

    https://gist.github.com/edenau/d23b71ff473720ae19fd4514f2232bdb#file-python-generator-py

    5. 编造环境:贯彻隔离

    如果在本文介绍的 5 个特色中只选一个,这就是说就是 编造环境 的采取。

    Python 使用程序通常会用各种不同之包,该署包可能是由具有复杂依赖关系的不同开发人员开发的。每个应用程序都会用特定的库设置,采用其他库的本子无法实现对某个应用程序安装包的摄制。

    故此,不存在满足所有应用要求的单个安装包。

          
    1. conda create -n venv pip python=3.7 # select python versionsource activate venv...source deactivate 

    为每个应用程序创建独立的、自洽的虚拟环境 venv 异常关键,这可以通过使用 pip 或 conda来促成。

    【编纂推荐】

    1. 2019 寒暑 Python 类库 Top 10
    2. Java 开发者需要研究 JDK,Linux 开发者需要研究 Kernel
    3. 北京大学姚班毕业生开发新特效编程语言,99列代码实现《雪花奇缘》
    4. TIOBE 1 月榜单:C 拥有“2019 寒暑编程语言”名称
    5. Linus Torvalds 礼貌之批评一位开发者的博文
    【义务编辑: 张燕妮 TEL:(010)68476606】

    点赞 0
  • Python   付出  编程语言
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    Python使用场景实战手册

    Python使用场景实战手册

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

    14人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    137人口订阅学习

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    30人口订阅学习

    读 书 +更多

    大道至简:软件工程实践者的思维

    该书是在“考虑艺术学”这一软件工程尚未涉足过的园地中的实习之作。笔者亲历国内软件工程的勇敢时代、泡沫时代,副失败中醒觉而创建独特之...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微