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

Python的高级特性你知道多少?我们来比较一下,看看使用

时间:2023-03-17 22:52:48 科技观察

Python有多容易就不用说了,看你用的语言就知道了。但是你已经掌握了Python所有隐藏的高级特性吗?在本文中,作者列出了Python中的五个稍微高级的特性以及如何使用它们。快来一探究竟吧!Python是一门美丽的语言,它简单易用但非常强大。但是你真的能用上Python的所有特性吗?任何编程语言的高级特性通常都是通过大量的经验发现的。假设您正在编写一个复杂的项目并在stackoverflow上寻找问题的答案。然后你突然发现了一个非常优雅的解决方案,它使用了一个你从不知道存在的Python特性!这种学习方式非常有趣:通过探索,通过偶然发现一些东西。下面是Python的5个高级特性以及如何使用它们。Lambda函数Lambda函数是一个相对较小的匿名函数——匿名的意思是它实际上没有函数名称。Python函数通常使用defa_function_name()风格定义,但对于lambda函数,我们根本不命名。这是因为lambda函数的功能是执行某种简单的表达式或操作,而无需完整定义函数。lambda函数可以接受任意数量的参数,但表达式只能有一个。x=lambdaa,b:a*bprint(x(5,6))#prints'30'x=lambdaa:a*3+3print(x(3))#prints'12'看多简单啊!我们在不定义整个函数的情况下执行一些简单的数学运算。这是Python的众多特性之一,使其成为一种干净、简单的编程语言。Map函数Map()是一个内置的Python函数,可以将函数应用于各种数据结构中的元素,例如列表或字典。这是执行此类操作的一种非常干净且可读的方式。defsquare_it_func(a):returna*ax=map(square_it_func,[1,4,7])print(x)#prints'[1,16,47]'defmultiplier_func(a,b):returna*bx=map(multiplier_func,[1,4,7],[2,5,8])print(x)#prints'[2,20,56]'看上面的例子!我们可以将函数应用于单个或多个列表。事实上,您可以使用任何Python函数作为map函数的输入,只要它与您正在操作的序列的元素兼容即可。Filter函数filter内置函数与map函数非常相似,它也将函数应用于序列结构(列表、元组、字典)。两者之间的主要区别在于filter()将只返回应用函数返回True的元素。详情请看下面的例子:#Ournumbersnumbers=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]#Functionthatfiltersoutallnumberswhichareodddeffilter_odd_numbers(num):ifnum%2==0:returnTrueelse:returnFalsefiltered_numbers=filter(filter_odd_numbers,numbers)print(filtered_numbers)#filtered_numbers=[2,4,6,8,10,12,14]我们不仅为每个列表元素评估True或False,filter()函数还确保只返回匹配True的元素。处理检查表达式和构建返回列表这两个步骤非常方便。Itertools模块Python的Itertools模块是一组用于处理迭代器的工具。迭代器是一种可以在for循环语句(包括列表、元组和字典)中使用的数据类型。使用Itertools模块中的函数可以执行许多通常需要多行函数和复杂列表理解的迭代器操作。关于Itertools的神奇之处,请看以下示例:fromitertoolsimport*#Easyjoiningoftwolistsintoalistoftuplesforiinizip([1,2,3],['a','b','c']):printi#('a',1)#('b',2)#('c',3)#Thecount()函数返回一个永远生成连续整数的交互器。这#oneisgreatforaddingindicesnexttoyourlist#elementsforreadabilityandconvenienceforiinizip(count(1),['Bob','Emily','Joe']):printi#(1,'Bob')#(2,'Emily')#(3,'Joe')#Thedropwhile()functionreturnsaniteratorthatreturns#alltheelementsoftheinputwhichcomeafteracertain#conditionbecomesfalseforthefirsttime.defcheck_for_drop(x):print'Checking:',xreturn(x>5)foriindropwhile(should_drop,[2,4,6,8,10,12]):print'Result:',i#Checking:2#Checking:4#Result:6#Result:8#Result:10#结果:12#Thegroupby()函数非常适合检索束#ofiteratorelementswhicharethesameorhavesimilar#propertiesa=sorted([1,2,1,3,2,1,2,3,4,5])forkey,valueingroupby(a):print(key,value),end='')#(1,[1,1,1])#(2,[2,2,2])#(3,[3,3])#(4,[4])#(5,[5])Generator函数Generator函number是一个类似迭代器的函数,即它也可以用在for循环语句中,这大大简化了您的代码,并且与简单的for循环相比节省了大量内存。例如,我们要将1到1000之间的所有数字相加,下面代码块的***部分向您展示了如何使用for循环来进行此计算。如果列表很小,比如1000行,计算所需的内存就可以了。但是如果列表很长,比如十亿个浮点数,这就会出问题。使用这种for循环,内存中会有很多列表,但并不是每个人都有最好的RAM来存储这么多。Python中的range()函数做同样的事情,它在内存中构建列表。代码的第二部分展示了如何使用Python生成器函数对数字列表求和。生成器函数只在必要时创建元素并将它们存储在内存中,即一次一个。这意味着如果你要创建数十亿个浮点数,你一次只能将它们存储在内存中!Python2.x中的xrange()函数使用生成器来构建列表。上面的例子说明了:如果要生成一个范围很大的列表,那么就需要用到生成器函数。如果您的内存有限,例如移动设备或边缘计算,这一点尤为重要。也就是说,如果您想多次迭代一个列表,并且它足够小以适合内存,您最好使用for循环或Python2.x中的range函数。因为generator函数和xrange函数每次访问都会生成新的列表值,而Python2.xrange函数是静态列表,为了快速访问,整数已经放在内存中了。#(1)使用forloopvnumbers=list()foriinrange(1000):numbers.append(i+1)total=sum(numbers)#(2)Usingageneratordefgenerate_numbers(n):num,numbers=1,[]whilenum