✅包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!
🔴1、原地交换两个数字
- Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:
In[1]:x,y=10,20In[2]:print(x,y)1020In[3]:x,y=y,x In[4]:print(x,y)2010- 赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 和 。
- 一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。
🔴2、链状比较操作符
- 比较操作符的聚合是另一个有时很方便的技巧:
In[5]:n=10In[6]:result=1<n<20In[7]:result Out[7]:TrueIn[8]:result=1>n<=9In[9]:result Out[9]:False🔴3、使用三元操作符来进行条件赋值
- 三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:
[表达式为真的返回值] if [表达式] else [表达式为假的返回值]
- 这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。
x=10if(y==9)else20- 同样地,我们可以对类做这种操作:
x=(classAify==1else classB)(param1,param2)- 在上面的例子里 classA 与 classB 是两个类,其中一个类的构造函数会被调用.
🔴4、多行字符串
- 基本的方式是使用源于 C 语言的反斜杠:
In[20]:multistr="select*frommulti_row \...:where row_id<5" In[21]:multistr Out[21]:'select * from multi_row where row_id < 5'- 另一个技巧是使用三引号:
In[23]:multistr="""select * from multi_row ...: where row_id < 5"""In[24]:multistr Out[24]:'select * from multi_row \nwhere row_id < 5'- 上面方法共有的问题是缺少合适的缩进,如果我们尝试缩进会在字符串中插入空格。所以最后的解决方案是将字符串分为多行并且将整个字符串包含在括号中:
In[25]:multistr=("select * from multi_row "...:"where row_id < 5"...:"orderby age")In[26]:multistr Out[26]:'select * from multi_row where row_id < 5 order by age'🔴5、存储列表元素到新的变量中
- 我们可以使用列表来初始化多个变量,在解析列表时,变量的数目不应该超过列表中的元素个数:【译者注:元素个数与列表长度应该严格相同,不然会报错】
In[27]:testlist=[1,2,3]In[28]:x,y,z=testlist In[29]:print(x,y,z)123🔴6、打印引入模块的文件路径
- 如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:
In[30]:importthreading In[31]:importsocket In[32]:print(threading)<module'threading'from'/usr/local/lib/python3.5/threading.py'>In[33]:print(socket)<module'socket'from'/usr/local/lib/python3.5/socket.py'>🔴7、交互环境下的"_"操作符
- 这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量:_(一个下划线)。
In[34]:2+3Out[34]:5In[35]:_ Out[35]:5In[36]:print(_)5- “_” 是上一个执行的表达式的输出。
🔴8、字典/集合推导式
- 与我们使用的列表推导相似,我们也可以使用字典/集合推导,它们使用起来简单且有效,下面是一个例子:
In[37]:testDict={i:i*iforiinrange(5)}In[38]:testSet={i*2for iinrange(5)}In[39]:testDict Out[39]:{0:0,1:1,2:4,3:9,4:16}In[40]:testSet Out[40]:{0,2,4,6,8}- 注:两个语句中只有一个 <:> 的不同
🔴9、调试脚本
- 我们可以在 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:
importpdb pdb.set_trace()- 我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。
🔴10、开启文件分享
- Python 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:(python3环境)
python3-mhttp.server- 上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。
🔴11、检查Python中的对象
- 我们可以通过调用 dir() 方法来检查 Python 中的对象,下面是一个简单的例子:
In[41]:test=[1,3,5,7]In[42]:print(dir(test))['__add__','__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__iadd__','__imul__','__init__','__iter__','__le__','__len__','__lt__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__reversed__','__rmul__','__setattr__','__setitem__','__sizeof__','__str__','__subclasshook__','append','clear','copy','count','extend','index','insert','pop','remove','reverse','sort']- 会列出对象的属性方法。
🔴12、简化if语句
- 我们可以使用下面的方式来验证多个值:
ifmin[1,3,5,7]:- 而不是
ifm==1or m==3or m==5or m==7:- 或者,对于 in 操作符我们也可以使用 ‘{1,3,5,7}’ 而不是 ‘[1,3,5,7]’,因为 set 中取元素是 O(1) 操作。
🔴13、运行时检测Python版本
- 当正在运行的 Python 低于支持的版本时,有时我们也许不想运行我们的程序。为达到这个目标,你可以使用下面的代码片段,它也以可读的方式输出当前 Python 版本:
importsys#Detect the Python version currently in use.ifnothasattr(sys,"hexversion")orsys.hexversion!=50660080:print("Sorry, you aren't running on Python 3.5n")print("Please upgrade to 3.5.n")sys.exit(1)#Print Python version in a readable format.print("Current Python version: ",sys.version)- 或者你可以使用 sys.version_info >= (3, 5) 来替换上面代码中的 sys.hexversion != 50660080,这是一个读者的建议。
- python3运行结果:
Python3.5.1(default,Dec2015,13:05:11)[GCC4.8.2]onlinux CurrentPythonversion:3.5.2(default,Aug222016,21:11:05)[GCC5.3.0]🔴14、组合多个字符串
- 如果你想拼接列表中的所有记号,比如下面的例子:
In[44]:test=['I','Like','Python','automation']In[45]:''.join(test)Out[45]:'ILikePythonautomation'🔴15、四种翻转字符串/列表的方式
- 翻转列表本身
In[49]:testList=[1,3,5]In[50]:testList.reverse()In[51]:testList Out[51]:[5,3,1]- 在一个循环中翻转并迭代输出
In[52]:forelementinreversed([1,3,5]):...:print(element)...:531- 一行代码翻转字符串
In[53]:"Test Python"[::-1]Out[53]:'nohtyP tseT'- 使用切片翻转列表
[1,3,5][::-1]🔴16、在python中使用枚举量
- 我们可以使用下面的方式来定义枚举量:
In[56]:classShapes:...:Circle,Square,Triangle,Quadrangle=range(4)...:In[57]:Shapes.Circle Out[57]:0In[58]:Shapes.Square Out[58]:1In[59]:Shapes.Triangle Out[59]:2In[60]:Shapes.Quadrangle Out[60]:3🔴17、从方法中返回多个值
- 并没有太多编程语言支持这个特性,然而 Python 中的方法确实(可以)返回多个值,请参见下面的例子来看看这是如何工作的:
In[61]:defx():...:return1,2,3,4...:In[62]:a,b,c,d=x()In[63]:print(a,b,c,d)1234🔴18、从两个相关的序列构建一个字典
In[92]:t1=(1,2,3)In[93]:t2=(10,20,30)In[94]:dict(zip(t1,t2))Out[94]:{1:10,2:20,3:30}🔴19、将字典拆分为键和值的列表
c={'Bob':'male','Jack':'male','Mary':'female','Tom':'male'}keys1=list(c.keys())#['Bob', 'Jack', 'Tom', 'Mary']values1=list(c.values())#['male', 'male', 'male', 'female']🔴20、一行代码计算任何数的阶乘
- python3环境:
In[75]:importfunctools In[76]:result=(lambdak:functools.reduce(int.__mul__,range(1,k+1),1))(3)In[77]:result Out[77]:6🔴21、重置递归限制
- Python 限制递归次数到 1000,我们可以重置这个值:
importsys x=1001print(sys.getrecursionlimit())sys.setrecursionlimit(x)print(sys.getrecursionlimit())#1-> 1000#2-> 100- 谨慎修改
🔴22、检查一个对象的内存使用
- 在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:
- python2.7:
importsys x=1print(sys.getsizeof(x))#-> 24- python3:
In[86]:importsys In[87]:x=1In[88]:sys.getsizeof(x)Out[88]:28🔴23、使用slots来减少内存开支
- 你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用slots类变量来在一定程度上减少内存开支。
importsys classFileSystem(object):def__init__(self,files,folders,devices):self.files=files self.folders=folders self.devices=devicesprint(sys.getsizeof(FileSystem))classFileSystem1(object):__slots__=['files','folders','devices']def__init__(self,files,folders,devices):self.files=files self.folders=folders self.devices=devicesprint(sys.getsizeof(FileSystem1))#In Python 3.5#1-> 1016#2-> 888- 很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用slots。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。
🔴24、使用lambda来模仿输出方法
In[89]:importsys In[90]:lprint=lambda*args:sys.stdout.write("".join(map(str,args)))In[91]:lprint("python","tips",1000,1001)Out[91]:pythontips1000100118🔴25、使用字典来存储选择操作
- 我们能构造一个字典来存储表达式:
In[70]:stdacl={...:'sum':lambdax,y:x+y,...:'subtract':lambdax,y:x-y...:}In[73]:stdacl['sum'](9,3)Out[73]:12In[74]:stdacl['subtract'](9,3)Out[74]:6🔴26、一行代码搜索字符串的多个前后缀
In[95]:print("http://www.google.com".startswith(("http://","https://")))TrueIn[96]:print("http://www.google.co.uk".endswith((".com",".co.uk")))True🔴27、不使用循环构造一个列表
In[101]:test=[[-1,-2],[30,40],[25,35]]In[102]:importitertools In[103]:print(list(itertools.chain.from_iterable(test)))[-1,-2,30,40,25,35]🔴28、在Python中实现一个真正的switch-case语句
- 下面的代码使用一个字典来模拟构造一个switch-case。
In[104]:defxswitch(x):...:returnxswitch._system_dict.get(x,None)...:In[105]:xswitch._system_dict={'files':10,'folders':5,'devices':2}In[106]:print(xswitch('default'))NoneIn[107]:print(xswitch('devices'))2🔴29、计数时使用Counter计数对象
- 这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。
- Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:
>>>fromcollectionsimportCounter>>>c=Counter(hello world)>>>c Counter({l:3,o:2,:1,e:1,d:1,h:1,r:1,w:1})>>>c.most_common(2)[(l,3),(o,2)]🔴30、漂亮的打印出JSON
- JSON是一种非常好的数据序列化的形式,被如今的各种api和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。
- 为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:
>>>importjson>>>print(json.dumps(data))# No indention{"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_intolerant":false}]}>>>print(json.dumps(data,indent=2))# With indention{"status":"OK","count":2,"results":[{"age":27,"name":"Oz","lactose_intolerant":true},{"age":29,"name":"Joe","lactose_intolerant":false}]}🟢总结
- 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
🟡文末福利
- 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
🔴包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
- ① Python所有方向的学习路线图,清楚各个方向要学什么东西
- ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
- ③ 100多个Python实战案例,学习不再是只会理论
- ④ 华为出品独家Python漫画教程,手机也能学习
✅可以扫描下方二维码领取【保证100%免费】
加粗样式