1.就地交换两个数字。
Python提供了一种直观的方式来分配和交换一行。请参考下面的例子。
x,y = 10,20print(x,y)
x,y = y,xprint(x,y)
#1(10,20)#2(20,10)
右边的任务会产生一个新的元组。而左边的那个会立即将那个(未被引用的)元组解包到名称和。
分配完成后,新的元组将被重新引用并标记为垃圾收集。变量的交换也最终发生。
2.链接比较运算符。
比较运算符的聚合是另一个有时候可以派上用场的技巧。
10,结果= 1 n
3.使用三元运算符进行有条件分配。
三元运算符是if-else语句的捷径,也称为条件运算符。
[on_true] if [expression] else [on_false]
这里有几个例子可以用来使代码紧凑和简洁。
下面的语句是做同样的意思,即“ 如果y是9,则将10赋值给x,否则将20赋值给x ”。如果需要的话,我们可以扩展运营商的链接。
x = 10 if(y == 9)else 20
同样,我们也可以为类对象做同样的事情。
x =(classA if y == 1 else classB)(param1,param2)
在上面的例子中,classA和classB是两个类,其中一个类构造函数会被调用。
下面是一个没有的例子。的条件加入评估最小的数字。
def small(a,b,c):小(a ,b ,c ):
如果a
打印(小(1,0,1))打印(小(1 ,0 ,1 )) 打印(小(1,2,2))打印(小(1 ,2 ,2 )) 打印(小(2,2,3))打印(小(2 ,2 ,3 )) 打印(小(5,4,3))打印(小(5 ,4 ,3 )) #Output#Output#0#1#2#3#0#1#2#3
我们甚至可以使用一个三元运算符的列表理解。
[m ** 2如果m> 10 else m ** 4(m)在范围内(50)]m ** 2 如果m > 10 else m ** 4 (m)在范围内(50 )] 0,1,16,81,256,625,1296,2401,4096,6561,10000,121,144,169,196,225,256,289,324,361,400,441, 529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936, 2304,2401]0,1,16,81,256,625,1296,2401,4096,6561,10000,121,144,169,196,225,256,289,324,361,400,441, 529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936, 2304,2401]
4.使用多行字符串。
基本的方法是使用从C语言中派生出来的反斜杠。
multiStr =“select * from multi_row = “select * from multi_row row_id
还有一个窍门是使用三重引号。
multiStr =“”“select * from multi_row = “”“select * from multi_row where row_id
上述方法的共同问题是缺乏正确的缩进。如果我们尝试缩进,它会在字符串中插入空格。
所以最后的解决方案是将字符串拆分成多行,并将整个字符串括在括号中。
multiStr =(“select * from multi_row”= (“select * from multi_row” “row_id
5.将列表的元素存储到新变量中。
我们可以使用一个列表来初始化一个no。的变量。在打开列表的同时,变量的数量不应该超过no。列表中的元素。
testList = [1,2,3]= [ 1 ,2 ,3 ] x,y,z = testList,y ,z = testList打印(x,y,z)打印(x ,y ,z )# - > 1 2 3# - > 1 2 3
6.打印导入模块的文件路径。
如果你想知道你的代码中导入的模块的绝对位置,然后使用下面的技巧。
导入线程 穿线 导入套接字导入套接字打印(线程)打印(线程)打印(插座)打印(套接字)#1- #1- #2- #2-
7.使用交互式“_”运算符。
这是一个很有用的功能,我们并不知道。
在Python控制台中,每当我们测试一个表达式或调用一个函数时,结果都会调度到一个临时名称_(一个下划线)。
>>> 2 + 1 2 + 1 33>>> _>>> _33>>>打印_>>> 打印_ 33
“_”引用上次执行的表达式的输出。
小编推荐大家加一下这个群:666468218这个群里好多人了!大家遇到啥问题都会在里面交流!而且免费分享零基础入门料资料web开发 爬虫资料一整套!是个非常好的学习交流地方!也有程序员大神给大家热心解答各种问题!很快满员了。欲进从速哦!各种PDF等你来下载!全部都是免费的哦!只为帮助大家快速入门,所以小编在群里等你们过来一起交流学习呢!
8.字典/设置理解。
就像我们使用列表推导一样,我们也可以使用字典/集合理解。它们使用简单,效果也一样。这是一个例子。
testDict = = { 我:我* 我为我在x范围(10 )} testSet = = { i * 2 for x in xrange (10 )} 打印(测试集)打印(testSet )打印(testDict)打印(testDict )#set([0,2,4,6,8,10,12,14,16,18])#set([0,2,4,6,8,10,12,14,16,18])##
注 -两个语句中只有的区别。另外,要在Python3中运行上面的代码,用替换。
9.调试脚本。
我们可以在
模块的帮助下,在Python脚本中设置断点。请按照下面的例子。
导入pdb PDBpdb.set_trace()。set_trace ()
我们可以在脚本的任何地方指定
并在那里设置一个断点。这非常方便。
10.安装文件共享。
Python允许运行一个HTTP服务器,您可以使用它来共享服务器根目录中的文件。以下是启动服务器的命令。
#Python 2
python -m SimpleHTTPServer- 米SimpleHTTPServer
#Python 3
python3 -m http.server- m http 。服务器
上面的命令会在默认端口8000上启动一个服务器。你也可以使用一个自定义的端口作为上述命令的最后一个参数。
11.在Python中检查一个对象。
我们可以通过调用dir()方法来检查Python中的对象。这是一个简单的例子。
测试= [1,3,5,7]= [ 1 ,3 ,5 ,7 ] 打印(目录(测试))打印(目录(测试))
[ '__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',' __getslice__”, '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__' , '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', '追加','计数“,”扩展“,”索引“,”插入“,”流行“,”删除“,”反向“,”排序“]'__add__' , '__class__' , '__contains__' , '__delattr__' , '__delitem__' , '__delslice__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__getattribute__' , '__getitem__' ,“__getslice__ ' , '__gt__' , '__hash__' , '__iadd__' , '__imul__' , '__init__' , '__iter__' , '__le__', '__len__' , '__lt__' , '__mul__' ,'__ne__' ,'__new__' ,'__reduce__' ,'__reduce_ex__' ,'__repr__' ,'__reversed__' ,'__rmul__' ,'__setattr__' ,'__setitem__' ,'__setslice__' ,'__sizeof__' ,'__str__' ,' __subclasshook__' ,'append' ,'count' ,'extend' ,'index' ,'insert' ,'pop' ,'remove',“反向” ,“排序” ]
12.简化If语句。
要验证多个值,我们可以按照以下方式进行。
如果[1,3,5,7]中的m:米在[ 1 ,3 ,5 ,7 ]:
代替:
如果m == 1或者m == 3或者m == 5或者m == 7:m == 1 或者m == 3 或者m == 5 或者m == 7 :
或者,我们可以使用''而不是'[1,3,5,7]'作为'in'运算符,因为'set'可以通过O(1)来访问每个元素。
13.在运行时检测Python版本。
如果当前运行的Python引擎少于支持的版本,有时我们可能不想执行我们的程序。要做到这一点,你可以使用下面的代码片段。它还以可读格式打印当前使用的Python版本。
打印(“对不起,你没有在Python 3.5上运行 n”)打印(“对不起,你没有在Python 3.5上运行 n” )
打印(“请升级到3.5。 n”)打印(“请升级到3.5。 n” )
sys.exit(1)。退出(1 )
#以可读格式打印Python版本。#以可读格式打印Python版本。print(“当前Python版本:”,sys.version)打印(“当前Python版本:” ,SYS 。版本)
或者,您可以使用上面的代码替换。这是一位知情读者的建议。
sys.version_info >=(3,5)
在Python 2.7上运行时输出。
Python 2.7.10(默认,2015年7月14日,19:46:27) 2.7 。10 (默认,2015年7月14 日,19 :46 :27 ) 在Linux上[GCC 4.8.2][ GCC 4.8 。2 ] 在Linux上
对不起,你没有在Python 3.5上运行对不起,你没有在Python 3.5上运行请升级到3.5。
在Python 3.5上运行时输出。
Python 3.5.1(默认,2015年12月,13:05:11) 3.5 。1 (默认,12月的到2015年,13 :05 :11 ) 在Linux上[GCC 4.8.2][ GCC 4.8 。2 ] 在Linux上
当前Python版本:3.5.2(默认,2016年8月22日,21:11:05) 目前的Python 版本:3.5 。2 (默认,2016年8月22 日,21 :11 :05 ) [GCC 5.3.0][ GCC 5.3 。0 ]
14.组合多个字符串。
如果要连接列表中的所有可用标记,请参阅下面的示例。
>>> test = ['I','Like','Python','automation']test = [ 'I' ,'Like' ,'Python' ,'automation' ]
现在,让我们从上面给出的列表中的元素创建一个单一的字符串。
>>> print''.join(test) 打印“ 。加入(测试)
15.四种方法来反转字符串/列表。
#反转列表本身。
testList = [1,3,5]= [ 1 ,3 ,5 ] testList.reverse()。反向()打印(testList)打印(testList )# - > [5,3,1]# - > [5,3,1]
#在循环中迭代时反转。
对于反转的元素([1,3,5]):print(element)元件在扭转([ 1 ,3 ,5 ):打印(元件) #1-> 5#1-> 5#2-> 3#2-> 3#3-> 1#3-> 1
#反转一个字符串。
“测试Python”[:: - 1][:: - 1 ]
这将输出作为“nohtyP tseT”
#使用切片反转列表。
[1,3,5] [:: - 1]1 ,3 ,5 ] [:: - 1 ]
上述命令将输出为[5,3,1]。
16.玩枚举。
使用枚举器,在循环中很容易找到索引。
testlist = [10,20,30]= [ 10 ,20 ,30 ] 对于我来说,枚举值(testlist):对于我,值在枚举(testlist ):
print(i,':',value)print (i ,':' ,value ) #1-> 0:10#1-> 0:10#1:20#1:20#3-> 2:30#3-> 2:30
17.在Python中使用枚举。
我们可以使用下面的方法来创建枚举定义。
上课形状: 形状:
圆形,方形,三角形,四边形=范围(4)圆形,方形,三角形,四边形= 范围(4 ) 打印(Shapes.Circle)打印(形状,圆形)打印(Shapes.Square)打印(形状。方形)打印(Shapes.Triangle)打印(形状。三角形)打印(Shapes.Quadrangle)打印(形状。四边形)#1-> 0#1-> 0#2-> 1#2-> 1#3-> 2#3-> 2#4-> 3#4-> 3
18.从函数返回多个值。
没有太多的编程语言支持这个功能。但是,Python中的函数确实会返回多个值。
请参考下面的例子看看它的工作。
#函数返回多个值。def x():def x ():
返回1,2,3,4返回1 ,2 ,3 ,4 #调用上述功能。#调用上述功能。a,b,c,d = x(),b ,c ,d = x ()打印(a,b,c,d)打印(a ,b ,c ,d )# - > 1 2 3 4# - > 1 2 3 4
19.使用Splat运算符解压缩函数参数。
splat操作符提供了一个艺术化的方式来解压参数列表。为了清晰起见请参考下面的例子。
def test(x,y,z):测试(x ,y ,z ):
打印(x,y,z)打印(x ,y ,z )testDict = {'x':1,'y':2,'z':3} = { 'x' :1 ,'y' :2 ,'z' :3 } testList = [10,20,30]= [ 10 ,20 ,30 ] 测试(* testDict)(* testDict )测试(** testDict)(** testDict )测试(* testList)(* testList )#1-> xyz#1-> xyz#2> 1 2 3#2> 1 2 3#3-> 10 20 30#3-> 10 20 30
20.使用字典来存储交换机。
我们可以做一个字典存储表达式。
stdcalc = {= {
'sum':lambda x,y:x + y,'sum' :lambda x ,y :x + y ,
'减':lambda x,y:x - y'减' :lambda x ,y :x - y }}打印(stdcalc [ '总和'](9,3))打印(stdcalc [ '总和' ](9 ,3 ))打印(stdcalc [ '减法'](9,3))打印(stdcalc [ '减去' ](9 ,3 ))#1-> 12#1-> 12#6#6
21.在一行中计算任意数字的阶乘。
Python 2.X.
结果=(lambda k:reduce(int .__ mul__,range(1,k + 1),1))(3)= (拉姆达ķ :减少(INT 。__mul__ ,范围(1 ,ķ + 1 ),1 ))(3 ) 打印(结果)打印(结果)# - > 6# - > 6
Python 3.X.
导入functools functools结果=(lambda k:functools.reduce(int .__ mul__,range(1,k + 1),1))(3)= (拉姆达ķ :functools 。减少(INT 。__mul__ ,范围(1 ,ķ + 1 ),1 ))(3 ) 打印(结果)打印(结果)# - > 6# - > 6
22.找到列表中最常见的值。
测试= [1,2,3,4,2,2,3,1,4,4,4]= [ 1 ,2 ,3 ,4 ,2 ,2 ,3 ,1 ,4 ,4 ,4 ] print(max(set(test),key = test.count))打印(最大(组(试验),键= 测试。计数))# - > 4# - > 4
23.重置递归限制。
Python限制递归限制为1000.我们可以重置它的值。
导入系统 SYSX = 1001= 1001打印(sys.getrecursionlimit())打印(SYS 。getrecursionlimit ())sys.setrecursionlimit(x)的。setrecursionlimit (x )打印(sys.getrecursionlimit())打印(SYS 。getrecursionlimit ())#1-> 1000#1-> 1000#2-> 1001#2-> 1001
请仅在需要时应用上述技巧。
24.检查对象的内存使用情况。
在Python 2.7中,一个32位的整数占用24个字节,而在Python 3.5中占用28个字节。为了验证内存使用情况,我们可以调用方法。
在Python 2.7。
导入系统 SYSX = 1= 1打印(sys.getsizeof(X))打印(SYS 。getsizeof (X ))# - > 24# - > 24
在Python 3.5中。
导入系统 SYSX = 1= 1打印(sys.getsizeof(X))打印(SYS 。getsizeof (X ))# - > 28# - > 28
25.使用__slots__来减少内存开销。
你有没有看过你的Python应用程序消耗大量的资源,特别是内存?这是一个使用类变量在一定程度上减少内存开销的技巧。
导入系统 SYSclass FileSystem(object):class FileSystem (object ):
def __init __(self,files,folders,devices):def __init__ (self ,files ,folders ,devices ):
self.files =文件自我。文件= 文件
self.folders =文件夹自我。文件夹= 文件夹
self.devices =设备自我。设备= 设备print(sys.getsizeof(FileSystem))打印(SYS 。getsizeof (文件系统)) class FileSystem1(object):class FileSystem1 (object ):
__slots__ = ['文件','文件夹','设备']= [ '文件' ,'文件夹' ,'设备' ]
def __init __(self,files,folders,devices):def __init__ (self ,files ,folders ,devices ):
self.files =文件自我。文件= 文件
self.folders =文件夹自我。文件夹= 文件夹
self.devices =设备自我。设备= 设备打印(sys.getsizeof(FileSystem1))打印(SYS 。getsizeof (FileSystem1 )) #在Python 3.5中#在Python 3.5中#1-> 1016#1-> 1016#888#888
很明显,从结果中可以看出,内存使用量有所节省。但是当一个类的内存开销不必要的大时,你应该使用__slots__。只有在分析应用程序后才能做到这一点。否则,你会使代码难以改变,没有真正的好处。
26.Lambda模仿打印功能。
27.从两个相关的序列创建一个字典。
t1 =(1,2,3)= (1 ,2 ,3 ) t2 =(10,20,30)= (10 ,20 ,30 ) 打印(字典(zip(t1,t2)))打印(字典(zip (t1 ,t2 )))# - > # - >
28.在行中搜索字符串中的多个前缀。
print(“http://www.google.com”.startswith((“http://”,“https://”)))(“http://www.google.com” 。startswith ((“HTTP://” ,“https://开头” ))) print(“http://www.google.co.uk”.endswith((“.com”,“.co.uk”)))打印(“http://www.google.co.uk” 。的endsWith ((“.COM” ,“.co.uk” ))) #1->是的#1->是的#2-真#2-真
29.形成统一的列表,不使用任何循环。
如果你有一个嵌套列表或元组的元素的输入列表,然后使用下面的技巧。但是,这里的限制是它使用for循环。
def unifylist(l_input,l_target):unifylist (l_input ,l_target ):
为它在l_input:为它在l_input :
如果isinstance(它,列表):如果isinstance (它,列表):
unifylist(it,l_target)(it ,l_target )
elif isinstance(it,tuple):elif isinstance (it ,tuple ):
unifylist(list(it),l_target)(列表(it ),l_target )
其他:其他:
l_target.append(IT)。追加(it )
返回l_target返回l_targettest = [[-1,-2],[1,2,3,[4,(5,[6,7])]],(30,40),[25,35]]= [[ - 1 ,- 2 ],[ 1 ,2 ,3 ,[ 4 ,(5 ,[ 6 ,7 )]], (30 ,40 ),[ 25 ,35 ]] 打印(unifylist(测试,[]))打印(unifylist (test ,[]))#输出=> [ - 1,-2,1,2,3,4,5,6,7,30,40,25,35]#输出=> [ - 1,-2,1,2,3,4,5,6,7,30,40,25,35]
统一包含列表和元组的列表的另一个更简单的方法是使用Python的包。它不需要循环。只要做一个,如果还没有的话。
导入more_itertools more_itertools测试= [[-1,-2],[1,2,3,[4,(5,[6,7])]],(30,40),[25,35]]= [[ - 1 ,- 2 ],[ 1 ,2 ,3 ,[ 4 ,(5 ,[ 6 ,7 )]], (30 ,40 ),[ 25 ,35 ]] 打印(列表(more_itertools.collapse(测试)))打印(列表(more_itertools 。崩溃(测试)))#Output => [-1,-2,1,2,3,4,5,6,7,30,40,25,35]#Output => [-1,-2,1,2,3,4,5,6,7,30,40,25,35]
30.在Python中实现一个真正的Switch-Case语句。
以下是使用字典模拟开关案例结构的代码。
def xswitch(x): xswitch (x ):
return xswitch._system_dict.get(x,None) 返回xswitch 。_system_dict 。get (x ,None ) xswitch._system_dict = {'files':10,'folders':5,'devices':2}。_system_dict = { 'files' :10 ,'folders' :5 ,'devices' :2 } 打印(xswitch( '默认'))print (xswitch ('default' ))打印(xswitch( '设备'))打印(xswitch ('devices' ))#1->无#1->无#2-> 2#2-> 2
今天总结了Python的三十条小技巧,有什么觉的可以补充的
领取专属 10元无门槛券
私享最新 技术干货