当前位置: 首页 > 科技观察

Python的这5个特性,后悔不知道

时间:2023-03-12 11:57:06 科技观察

作为近10年才兴起的编程语言,Python已经被证明是一门非常强大的语言。从交互式地图到区块链,我用Python构建了许多应用程序。对于初学者来说,Python中有很多特性是一开始很难掌握的。即使您是从另一种语言转过来的程序员,在更高的抽象层次上用Python编码绝对是另一种体验。我希望我能早点知道一些Python特性。本文介绍了它的5个最重要的特性。1、列表理解:代码更紧凑很多人认为lambda、map和filter是初学者应该首先掌握的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]列表解析是一种简洁而灵活的方式,可以使用灵活的表达式和条件从其他列表创建新列表。它由方括号构成,只有当列表中的元素满足特定条件时,表达式或函数才作用于列表中的每个元素。此外,它可以处理带有嵌套的嵌套列表,这比使用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]下载地址:python-list-comprehension.pyhttps://gist.github.com/edenau/148a56e624297addcbceb1805c2d4554#file-python-列表理解-py2。列表操作:实现列表的双向操作。Python允许使用反向索引,其中aList[-1]==aList[len(aList)-1]。因此,我们可以通过调用aList[-2]来获取列表的倒数第二个元素。我们还可以使用aList[start:end:step]语法对列表进行切片,其中包含开始元素而不包含结束元素(即[start,end]),步长为step。).因此,调用aList[2:5]将导致[2,3,4]。我们也可以通过调用aList[::-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=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=9下载地址:python-unpacking.pyhttps://gist.github.com/edenau/da1e354a509d4129db47545f44a5028d#file-python-拆包-py3。压缩和枚举: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.下载地址:python-zip-1.pyhttps://gist.github.com/edenau/f159058e3d1763ea2ec8cd792e4a8280#file-python-zip-1-pyEng=list(zip(engList,espList,numList))Eng.sort()#sortbyengLista,b,c=zip(*Eng)print(a)print(b)print(c)#('一','二','零')#('uno','dos','cero')#(1,2,0)下载地址:python-zip-2。pyhttps://gist.github.com/edenau/4a2b984cf78daae9fc8ba57a3b0a843b#file-python-zip-2-pyEnumerate一开始看起来有点吓人,但实际上在很多情况下使用起来方便很多。它是一个自动计数器,通常在for循环中使用,这样就不需要创建和初始化counter=0和counter+=1的计数器。枚举和压缩是构造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。下载地址:python-enumerate.pyhttps://gist.github.com/edenau/34fabb07f38dde6b186724f85bd1e7b8#file-python-enumerate-py4。生成器:更高效的内存当我们想要计算一个大的结果集,但又不想同时为所有的结果数据分配内存时,我们可以使用生成器(Generator)。换句话说,它是动态生成值的,不会将之前的值存储在内存中,所以我们只能迭代一次。在读取大文件或使用yield关键字生成无限序列时经常使用它。我发现它在我的大多数数据科学项目中都很有效。defgen(n):#aninfinitesequencegeneratorthatgeneratesintegers>=nwhileTrue:yieldnn+=1G=gen(3)#startsat3print(next(G))#3print(next(G))#4print(next(G))#5print(next(G))#6下载地址:python-generator.pyhttps://gist.github.com/edenau/d23b71ff473720ae19fd4514f2232bdb#file-python-generator-py5。虚拟环境:实现隔离如果只选择了本文介绍的五个特性中的一个,那就是虚拟环境的使用。Python应用程序经常使用各种不同的包,可能由具有复杂依赖关系的不同开发人员使用。每个应用程序都会设置一个特定的库,不能使用另一个库的版本复制应用程序安装包。因此,没有一个单一的安装包可以满足所有的应用需求。condacreate-nvenvpippython=3.7#selectpythonversionsourceactivatevenv...sourcedeactivate为每个应用程序创建一个独立的、自洽的虚拟环境venv非常重要,这可以通过使用pip或conda来实现。