今天和大家分享:5个你可能没听说过的Python隐藏技能。1....对象没错,你没看错,Python中的“...”...代表一个名为Ellipsis的对象。根据官方描述,它是一个特殊的值,通常可以用作空函数或Numpy中切片操作的占位符。如:defmy_awesome_function():...相当于:defmy_awesome_function():Ellipsis当然也可以用pass或者string作为占位符:defmy_awesome_function():passdefmy_awesome_function():"一个空的,但是alsoawesomefunction”它们的最终效果是一样的。让我们来谈谈......对象如何在Numpy中工作,创建一个3x3x3矩阵数组,然后获取所有最内层矩阵的第二列:>>>importnumpyasnp>>>array=np.arange(27).reshape(3,3,3)>>>arrayarray([[[0,1,2],[3,4,5],[6,7,8]],[[9,10,11],[12,13,14],[15,16,17]],[[18,19,20],[21,22,23],[24,25,26]]])为获取最层的第二列矩阵,传统的方法可能是这样的:>>>array[:,:,1]array([[1,4,7],[10,13,16],[19,22,25]])如果你知道如何使用...对象,它看起来像这样:>>>array[...,1]array([[1,4,7],[10,13,16],[19,22,25]])但是请注意,...对象仅适用于Numpy,不适用于Python内置数组。2.拆包迭代对象拆包迭代对象是一个非常方便的特性:>>>a,*b,c=range(1,11)>>>a1>>>c10>>>b[2,3,4,5,6,7,8,9]或者:>>>a,b,c=range(3)>>>a0>>>b1>>>c2是一样的,而不是写这段代码:>>>lst=[1]>>>a=lst[0]>>>a1>>>(a,)=lst>>>a1你不妨执行更优雅的赋值操作,比如解压迭代对象:>>>lst=[1]>>>[a]=lst>>>a1虽然这样看起来有点傻,但是在我看来,比起之前的写法,要优雅多了。3、展开的艺术数组有各种奇怪的姿势,例如:>>>l=[[1,2,3],[4,5,6],[7,8,9]]>>>flattened=[elemforsublistinlforeleminsublist]>>>flattened[1,2,3,4,5,6,7,8,9]如果对reduce和lambda有一定了解,建议多用优雅的方式:>>>fromfunctoolsimportreduce>>>reduce(lambdax,y:x+y,l)[1,2,3,4,5,6,7,8,9]结合reduce和lambda,可以对l数组中的每个子数组进行拼接操作。当然还有更神奇的方法:>>>sum(l,[])[1,2,3,4,5,6,7,8,9]>>>#其实相当于[]+[1,2,3]+[4,5,6]+[7,8,9]对了,通过对二维数组进行求和运算,就可以将二维数组中的每个元素进行拼接通过“加法”站起来。同理,如果对三位数组进行求和运算,可以将其变成二维数组,然后对二维数组进行求和运算,展开为一维数组。虽然这种技术很棒,但我不推荐它,因为它的可读性太强。4.下划线_变量每当你在Python解释器、IPython或Django控制台中运行表达式时,Python都会将输出的值绑定到_变量:>>>nums=[1,3,7]>>>>sum(nums)11>>>_11>>>因为它是一个变量,所以你总是可以覆盖它,或者像普通变量一样操作它:>>>9+_20>>>a=_>>>a205。很多人不知道else的多用途。else可以用在很多地方。除了典型的ifelse之外,我们还可以在循环和异常处理中使用它。如果一个循环需要判断循环中是否处理了某个逻辑,通常会这样:found=Falsea=0whilea<10:ifa==12:found=Truea+=1ifnotfound:print("awasneverfound")如果引入else,我们可以少用一个变量:a=0whilea<10:ifa==12:breaka+=1else:print("awasneverfound")异常处理我们可以尝试做。..except...未捕获到异常时使用else写逻辑:In[13]:try:...:{}['lala']...:exceptKeyError:...:print("Keyismissing")...:else:...:print("Elsehere")...:Keyismissing这样,如果程序没有异常,就会走else分支:在[14]中:尝试:...:{'lala':'bla'}['lala']...:除了KeyError:...:print("Keyismissing")...:else:...:print("Elsehere")...:Elsehere如果你经常进行异常处理,你就会知道这个技巧非常方便。以上就是本次分享的全部内容。想了解更多Python知识,请前往公众号:Python编程学习圈,每日干货分享。
