前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >30个基本的Python技巧和窍门程序员

30个基本的Python技巧和窍门程序员

作者头像
企鹅号小编
发布2018-01-10 10:18:20
6720
发布2018-01-10 10:18:20
举报
文章被收录于专栏:编程编程编程

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的三十条小技巧,有什么觉的可以补充的

本文来自企鹅号 - 鲁滨逊媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 鲁滨逊媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档