KirillSharkovski发表于Unsplash杂志< titlesplit >更好的Python特性Python是一种编程语言,在过去十年中一直在崛起,并被证明是一种非常强大的语言。我用Python构建了许多应用程序,从交互式地图到区块链。Python的特点很多,初学者很难从一开始就掌握所有的特点。即使你是一名从C或MATLAB等其他语言转过来的程序员,在更高的抽象层次上用Python编写代码也绝对是一种不同的体验。回过头来看,有很多Python的特性,如果早点知道,就可以少走很多弯路了。现在我想强调五个最重要的特征。1.理解列表——压缩代码许多人将lambda、映射和过滤器称为每个初学者都应该学习的Python“技巧”。虽然我认为它们是我们应该掌握的特性,但由于缺乏灵活性,我发现它们在大多数时候并不是特别有用。Lambda是一种将函数组合成一行以供一次性使用的方法。如果函数被多次调用,性能将受到影响。另一方面,map将函数应用于列表中的所有元素,而filter获取集合中满足用户定义条件的元素子集。add_func=lambdaz:z**2is_odd=lambdaz:z%2==1multiply=lambdax,y:x*yaList=list(range(10))print(aList)#[0,1,2,3,4,5,6,7,8,9]照片由Unsplash杂志中的AnastaseMaragos提供列表理解是一种简洁灵活的方式,可以使用灵活的表达式和条件从其他列表创建列表。它由方括号构成,它有一个表达式或函数,仅当元素满足特定条件时才应用于列表中的每个元素。也可以嵌套处理嵌套列表,比使用map和filter灵活多了。#Syntaxoflistcomprehension[expression(x)forxinaListifoptional_condition(x)]print(list(map(add_func,aList)))print([x**2forxinaList])#[0,1,4,9,16,25,36,49,64,81]#[0,1,4,9,16,25,36,49,64,81]print(list(filter(is_odd,aList)))print([xforxinaListifx%2==1])#[1,3,5,7,9]#[1,3,5,7,9]2.List循环Python允许使用负索引,其中Altruts[-1]==Altrue[LeN(Listor)-1]。所以我们可以通过调用list[-2]等来获取列表中的倒数第二个元素。我们还可以使用语法aList[start:end:step]对列表进行切片,它包含起始元素但不包含结束元素。因此,aList[2:5]的结果是[2,3,4]。我们还可以通过调用list[::-1]来反转列表,我觉得这种技术非常优雅。MartinShreder在Unsplash杂志上的照片列表也可以分解为单个元素,或者使用星号与元素和子列表混合。a,b,c,d=aList[0:4]print(f'a={a},b={b},c={c},d={d}')#a=0,b=1,c=2,d=3a,*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=93。压缩和枚举:for循环Zip函数创建一个聚合元素的迭代器。它允许在for循环中并行遍历列表并并行排序。可以用星号解压。numList=[0,1,2]engList=['零','一','二']espList=['cero','uno','dos']打印(列表(zip(numList,engList,espList)))#[(0,'zero','cero'),(1,'one','uno'),(2,'two','dos')]fornum,eng,espinzip(numList,engList,espList):print(f'{num}是{eng}英语和{esp}西班牙语。')#0iszeroinEnglishandceroinSpanish.#1isoneinEnglishandunoinSpanish.#2istwoinEnglishanddosinSpanish.Eng=list(zip(engList,espList,numList))Eng.sort()#sortbyengLista,b,c=zip(*Eng)print(a)print(b)print(c)#('一','二','零')#('uno','dos','cero')#(1,2,0)ErolAhmed在Unsplash杂志上列举的照片乍一看可能有点吓人,但在很多情况下它非常方便。它是for循环中经常使用的自动计数器,不需要在for循环中通过counter=0和counter+=1来创建和初始化计数器变量。枚举和zip是构造for循环时最强大的两个工具。大写=['A','B','C','D','E','F']小写=['a','b','c','d','e','f']fori,(upper,lower)inumerate(zip(upperCase,lowerCase),1):print(f'{i}:{upper}and{lower}.')#1:Aanda.#2:Bandb.#3:Candc。#4:Dandd。#5:Eande。#6:Fandf。4.生成器:将使用内存高效生成器。换句话说,它们动态生成值,而不会将之前的值存储在内存中,因此我们只能对它们进行一次迭代。它们通常用于读取大文件或使用yield关键字生成无限序列。我经常发现它在我的大多数数据科学项目中都很有用。defgen(n):#aninfinitesequencegeneratorthatgeneratesintegers>=nwhileTrue:yieldnn+=1G=gen(3)#startsat3print(next(G))#3print(next(G))#4print(next(G))#5print(next(G))#65。虚拟环境:隔离如果你看完这篇文章后只记得其中之一,那应该就是虚拟环境的使用了。MatthewKwong在Unsplash上拍摄的照片Python应用程序通常使用来自不同开发人员的许多不同包,具有复杂的依赖关系。不同的应用程序是使用特定的库设置开发的,其中无法使用其他库版本重现结果。没有单一安装可以满足所有应用程序要求这样的事情。condacreate-nvenvpippython=3.7#selectpythonversionsourceactivatevenv...sourcedeactivate因此,为每个应用程序创建单独的隔离虚拟环境venv非常重要,这可以使用pip或conda来完成。
