学习Python,这29个实用小技巧你如果不知道的话,那亏大了!【纯干货,建议收藏】

建议收藏】30个较难Python脚本,干货分享 本篇较难,;接上篇文章,对于Pyhon的学习,上篇学习的结束相信大家对于Pyhon有了一定的理解和经验,学习完上篇文章之后再研究研究剩下的30个脚本你将会有所成就!加油! 阅读详情

前言

先收藏,再点赞,今后好运定不断!

各位CSDN上的朋友们大家好,先厚脸皮讨要个三连支持吧!希望这篇文章能帮助到你!

好了!废话不多说,直接上干货:

1、使用字典来存储选择操作

我们能构造一个字典来存储表达式:

In [70]: stdacl = { 
    ...: 'sum':lambda x,y : x + y,
    ...: 'subtract':lambda x,y : x - y 
    ...: } 
 
In [73]: stdacl['sum'](9,3) 
Out[73]: 12
 
In [74]: stdacl['subtract'](9,3) 
Out[74]: 6

2、一行代码计算任何数的阶乘

python3环境:

In [75]: import functools
 
In [76]: result = ( lambda k : functools.reduce(int.__mul__,range(1,k+1),1))(3) 
 
In [77]: result
Out[77]: 6

3、找到列表中出现最频繁的数

 
In [82]: test = [1,2,3,4,2,2,3,1,4,4,4] 
 
In [83]: print(max(set(test),key=test.count)) 
4

4、重置递归限制

Python 限制递归次数到 1000,我们可以重置这个值:

import sys
 
x=1001
print(sys.getrecursionlimit())
 
sys.setrecursionlimit(x)
print(sys.getrecursionlimit())
 
#1-> 1000
#2-> 100

5、原地交换两个数字

Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:

In [1]: x,y = 10 ,20 
 
In [2]: print(x,y)
10 20
 
In [3]: x, y = y, x 
 
In [4]: print(x,y)
20 10

赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 和 。

一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。


6、链状比较操作符

比较操作符的聚合是另一个有时很方便的技巧:

In [5]: n = 10 
 
In [6]: result = 1 < n < 20 
 
In [7]: result 
Out[7]: True
 
In [8]: result = 1 > n <= 9 
 
In [9]: result 
Out[9]: False

7、使用三元操作符来进行条件赋值

三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:

[表达式为真的返回值] if [表达式] else [表达式为假的返回值]

这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。

x = 10 if (y == 9) else 20

同样地,我们可以对类做这种操作:

x = (classA if y == 1 else classB)(param1, param2)

在上面的例子里 classA 与 classB 是两个类,其中一个类的构造函数会被调用.

下面是另一个多个条件表达式链接起来用以计算最小值的例子:

In [10]: def small(a,b,c):
    ...:     return a if a<=b and a<=c else ( b if b<=a and b<=c else c) 
    ...: 
 
In [11]: small(1,0,1)
Out[11]: 0
 
In [12]: small(1,2,3)
Out[12]: 1

我们甚至可以在列表推导中使用三元运算符:

In [14]: [ m**2 if m > 10 else m**4 for m in range(20) ] 
Out[14]: 
[0,1,16,81,256,625,1296,2401,4096,6561,10000,121,144,169,196,225,256,289,324,61]

8、检查一个对象的内存使用

在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:

python2.7import sys
    x=1
    print(sys.getsizeof(x))
     
    #-> 24

python3:

    In [86]: import sys 
     
    In [87]: x = 1
     
    In [88]: sys.getsizeof(x) 
    Out[88]: 28

9、使用slots来减少内存开支

你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用 slots 类变量来在一定程度上减少内存开支。


```python
   import sys
    class FileSystem(object):
     
        def __init__(self, files, folders, devices):
            self.files = files
            self.folders = folders
            self.devices = devices
    print(sys.getsizeof( FileSystem ))
     
    class FileSystem1(object):
     
        __slots__ = ['files', 'folders', 'devices']
        def __init__(self, files, folders, devices):
            self.files = files
            self.folders = folders
            self.devices = devices
     
    print(sys.getsizeof( FileSystem1 ))
    #In Python 3.5
    #1-> 1016
    #2-> 888

很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用 slots。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。


10、使用lambda来模仿输出方法

 In [89]: import sys 
     
    In [90]: lprint = lambda *args: sys.stdout.write("".join(map(str,args))) 
     
    In [91]: lprint("python","tips",1000,1001) 
    Out[91]: pythontips1000100118

11、从两个相关的序列构建一个字典

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}

12、一行代码搜索字符串的多个前后缀

In [95]: print("http://www.google.com".startswith(("http://", "https://")))
True
 
In [96]: print("http://www.google.co.uk".endswith((".com", ".co.uk")))
True

13、在Python中实现一个真正的switch-case语句

下面的代码使用一个字典来模拟构造一个switch-case。

   In [104]: def xswitch(x):
         ...:     return xswitch._system_dict.get(x, None) 
         ...: 
     
    In [105]: xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}
     
    In [106]: print(xswitch('default'))
    None
     
    In [107]: print(xswitch('devices'))
    2

14、多行字符串

基本的方式是使用源于 C 语言的反斜杠:

 In [20]: multistr = " select * from multi_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 " 
    ...: "order by age")  
In [26]: multistr
Out[26]: 'select * from multi_row where row_id < 5 order by age'

15、存储列表元素到新的变量中

我们可以使用列表来初始化多个变量,在解析列表时,变量的数目不应该超过列表中的元素个数:【译者注:元素个数与列表长度应该严格相同,不然会报错】

In [27]: testlist = [1,2,3] 
 
In [28]: x,y,z = testlist 
 
In [29]: print(x,y,z) 
1 2 3

16、四种翻转字符串/列表的方式

翻转列表本身

In [49]: testList = [1, 3, 5] 
 
In [50]: testList.reverse() 
 
In [51]: testList
Out[51]: [5, 3, 1]

在一个循环中翻转并迭代输出

In [52]: for element in reversed([1,3,5]):
    ...:     print(element) 
    ...:     
5
3
1

一行代码翻转字符串

In [53]: "Test Python"[::-1]
Out[53]: 'nohtyP tseT'

使用切片翻转列表

[1, 3, 5][::-1]

17.玩转枚举

使用枚举可以在循环中方便地找到(当前的)索引:

In [54]: testList= [10,20,30] 
 
In [55]: for i,value in enumerate(testList):
    ...:     print(i,':',value)
    ...:     
0 : 10
1 : 20
2 : 30

18.在python中使用枚举量

我们可以使用下面的方式来定义枚举量:

In [56]: class Shapes:
    ...:     Circle,Square,Triangle,Quadrangle = range(4) 
    ...:     
 
In [57]: Shapes.Circle
Out[57]: 0
 
In [58]: Shapes.Square
Out[58]: 1
 
In [59]: Shapes.Triangle
Out[59]: 2
 
In [60]: Shapes.Quadrangle
Out[60]: 3

19.从方法中返回多个值

并没有太多编程语言支持这个特性,然而 Python 中的方法确实(可以)返回多个值,请参见下面的例子来看看这是如何工作的:

In [61]: def x():
    ...:     return 1,2,3,4 
    ...: 
 
In [62]: a,b,c,d = x()
 
In [63]: print(a,b,c,d) 
1 2 3 4

20.打印引入模块的文件路径

如果你想知道引用到代码中模块的绝对路径,可以使用下面的技巧:

In [30]: import threading 
 
In [31]: import socket 
 
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'>

21.交互环境下的"_"操作符

这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。

In [34]: 2 + 3 
Out[34]: 5
 
In [35]: _
Out[35]: 5
 
In [36]: print(_) 
5

“_” 是上一个执行的表达式的输出。


22.字典/集合推导式

与我们使用的列表推导相似,我们也可以使用字典/集合推导,它们使用起来简单且有效,下面是一个例子:

In [37]: testDict = {i : i*i for i in range(5)} 
 
In [38]: testSet = { i*2 for i in range(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}

注:两个语句中只有一个 <:> 的不同,另,在 Python3 中运行上述代码时,将 改为 。


23、调试脚本

我们可以在 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:

import pdb
pdb.set_trace()

我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。


24、开启文件分享

Python 允许运行一个 HTTP 服务器来从根路径共享文件,下面是开启服务器的命令:(python3环境)

python3 -m http.server

上面的命令会在默认端口也就是 8000 开启一个服务器,你可以将一个自定义的端口号以最后一个参数的方式传递到上面的命令中。

Paste_Image.png

25、检查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']

会列出对象的属性方法。


26、简化if语句

我们可以使用下面的方式来验证多个值:

 if m in [1,3,5,7]:

而不是

if m==1 or m==3 or m==5 or m==7:

或者,对于 in 操作符我们也可以使用 ‘{1,3,5,7}’ 而不是 ‘[1,3,5,7]’,因为 set 中取元素是 O(1) 操作。


27、运行时检测Python版本

当正在运行的 Python 低于支持的版本时,有时我们也许不想运行我们的程序。为达到这个目标,你可以使用下面的代码片段,它也以可读的方式输出当前 Python 版本:

import sys
 
#Detect the Python version currently in use.
if not hasattr(sys, "hexversion") or sys.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运行结果:

Python 3.5.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
 
Current Python version:  3.5.2 (default, Aug 22 2016, 21:11:05) 
[GCC 5.3.0]

28、组合多个字符串

如果你想拼接列表中的所有记号,比如下面的例子:

In [44]: test = ['I', 'Like', 'Python', 'automation']
 
In [45]: ''.join(test)
Out[45]: 'ILikePythonautomation'

29、 不使用循环构造一个列表

In [101]: test = [[-1, -2], [30, 40], [25, 35]] 
 
In [102]: import itertools
 
In [103]: print(list(itertools.chain.from_iterable(test)))
[-1, -2, 30, 40, 25, 35]

结语

以上就是分享给大家的一些Python实用技巧了,如果觉得对你有帮助,还望帮忙点下赞和关注。

另外如果需要技术讨论,可以加我的技术讨论扣扣群:976191019,也可以直接点击这里进入。里面还为大家准备了一些Python相关的技术干货,有需要的可以进来白嫖!

AUTO-DL平台快速部署BEVFormer:Nuscenes数据集完整训练避坑指南 本文详细介绍了在AUTO-DL平台高效部署BEVFormer模型并利用Nuscenes数据集进行完整训练的实战指南。重点解析了平台数据管理、环境配置、数据集迁移解压、预处理及训练启动等全流程中的关键步骤与常见避坑技巧,帮助研究者和工程师快速复现这一前沿视觉感知模型,节省云端训练时间与成本。 阅读详情

相关推荐

GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO)

GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO)​ ,人工智能,计算机视觉,大模型,AI,本文详细介绍了视觉惯性里程计(VIO)作为GNSS/RTK定位失效时的替代方案。阐述了VIO的定义、优势及与其他定位技术的区别,讲解了视觉传感器和IMU的工作原理及数据融合原理,分析了时间同步、标定等关键技术,介绍了VINS-Mono等常用框架、简单代码示例、应用场景,还探讨了VIO面临的挑战与未来发展趋势,展现了其在多个领域的重要性与应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

收藏!!整理了100个Python小技巧!!

大家好,我是小F~目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。你可以用它来完成很多任务,比如数据科学、机器学习、W...

法纳斯特 2352

工具变量-环保垂直政策-试点.xlsx

详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/144500433

【推荐】五个实用Python小技巧

当我们开始学习Python时,可能需要一段时间来学习一些技巧和窍门,但是掌握这些技巧可以使得我们的编程生活更加轻松。在本文中,我们将探索一些可以在Python中使用的技巧。喜欢本文记得收藏、点赞、关注。 【注】文末提供技术交流群 1. 水平打印 当迭代循环遍历列表时,print函数会打印列表中每个元素,每行打印一个元素。这是因为print函数有一个名为end的参数。默认情况下,end参数有一个转义字符_end=’\n’_。要水平打印,我们需要删除转义字符,并用空字符串_end=""_替换它。 代码如下:

Python学习与数据挖掘 5273

20个常用的Python小技巧

2019 年第 73 篇文章,总第 97 篇文章 原题| 20 Python Snippets You Should Learn Today 作者| Chaitanya Baweja 原文| https://medium.com/better-programming/20-python-snippets-you-should-learn-today-8328e26ff124 ...

AI 算法笔记 958

10条Python实用小技巧建议收藏

众所周知,Python以简洁易上手著称,面对复杂琐碎的重复性工作,有时候很有必要提炼一些小脚本来处理重复工作,今天就给大家整理了十个超实用小技巧,可直接运行,建议收藏

技术专家 999

提高Python运行效率的六个窍门

曾灵敏 — MAY 18, 2015 Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。仅如此,它还轻松支持多任务处理,比如多进程。喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应用提速。窍门一:关键代码使用外部功能包Python简化了许多编程任务,但是对于一些时间敏感的任务,它的表现经常尽人意。使

wangpeng198688的专栏 1665

建议收藏】30个硬核Python脚本,干货分享

干 货.本篇较难,;接上篇文章,对于Pyhon的学习,上篇学习的结束相信大家对于Pyhon有了一定的理解和经验,学习完上篇文章之后再研究研究剩下的30个脚本你将会有所成就!加油!

m0_61249789的博客 1281

干货!77个Python常用函数汇总,赶紧收藏

77个Python常用函数汇总,内容包含几乎所有Python所涉及函数,赶紧码住!

m0_73342362的博客 1万+

25道Python练手题(附详细答案),赶紧收藏!_python题库

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。我先来介绍一下这些东西怎么用,文末抱走。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。最近我才对这些路线做了一下新的更新,知识体系更全面了。

2301_76268112的博客 1718

人工智能常用的29算法_吐血推荐:大数据、数据分析、人工智能…最新干货资料全在这里了...

导读:程序员节到了,数据叔总想给大家送点实实在在的福利,比如送个对象,但又操作了。生活上帮了你,但学业和事业上,数据叔会尽力为你助力。我分门别类整理了2020年以来大数据DT公众号发布的原创干货文章,数据分析、机器学习、大数据、云计算、中台等等,这份技术宝藏专业领域跨度大,既适合自己学习,又适合分享跟从事同行业的小伙伴。2020年,张华去大厂研究人工智能;李萍在大学课堂上刚刚学会了...

weixin_39975486的博客 2528

Python实用案例,Python脚本,Python实现帮你选择双色球号码

双色球,顾名思义,就是两种颜色的球,红色和蓝色。红球从1-33中取出6个,篮球从1-16取出1个。注意,红球为放回采样,也就是能有重复的。那么,带大家用python来选择双色球号码。其实很简单,只用到一个随机数模块。先说红球共6个,每次从1-33个数中随机选择一个,且重复的情况下,添加到一个列表中;蓝球从1-16个球中随机选择一个即可。

Everly_的博客 2153

熬夜爆肝!C++核心STL容器知识点汇总整理【3W字干货预警 建议收藏】_stl知识点总结百度网盘

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

2401_84572752的博客 744

[数据分析实例4]使用python-pandas对历届世界杯数据进行数据分析,并用matplotlib绘图,干货满满,赶紧收藏学习起来!

这是针对世界杯数据分析的第4篇文章,如果想看前面几篇内容的,点击下面的链接:[数据分析实例1]使用python-pandas对历届世界杯进行数据分析,并用matplotlib绘图需要看数据介绍的,可以看数据分析实例3这一篇内容,本篇文章会另外介绍了。

热心的布丁-有计划的自学编程才会成功 534

B站收藏量最多的编程学习资源大合集!码起来慢慢看!

B站收藏量最多的编程学习资源大合集!

cxyITgc的博客 2014

全网最全python教程,从零到精通(学python有它就够必收藏)_python学习相关博客

说了这么多,旨在告诉大家Python这个类目无论是功能性、还是上手程度都碾压其他语言,作为最适合零基础入门的编程语言,想要学习自然能纸上谈兵,还得沉下心来深入的研究和学习。上述这份完整版的Python全套学习资料已经上传CSDN官方,如果需要可以微信扫描下方CSDN官方认证二维码 即可领取👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]]安全链接,放心点击在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建等号(=)用来给变量赋值。

weixin_57992300的博客 4028

盘点数据科学最流行的29Python库,数据分析必看

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。下面列出了一些流行的数据科学库。

2401_84563287的博客 1077

收藏Python 全栈必备的 700 个知识点,一次性获得!

Python 将成为每个开发者的标配。作者 | GitChat头图 | CSDN 下载自 VCG我见过很多的 Python 讲解教程和书籍,它们大都这样讲 Python 的:先从 Pyt...

CSDN资讯 2286
王胖子1024
博客等级 码龄5年 831粉丝 1原创
评论 90
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值