当前位置: 首页 > 科技观察

24个非常好用的Python实用技巧

时间:2023-03-11 21:15:20 科技观察

在这里,我尝试以A-Z开头的格式分享其中的一些技巧,并在本文中简要介绍这些方法,如果您对其中的一种或多种感兴趣对它们感兴趣的可以通过文末的参考资料查看官方文档。希望它能帮助你。A-Zall或任何Python语言如此流行的众多原因之一是因为它的可读性和表达力非常强。人们经常开玩笑说Python是可执行的伪代码。很难争论何时可以编写这样的代码。x=[True,True,False]ifany(x):print("至少有一个为真")ifall(x):print("全部为真")ifany(x)andnotall(x):print("至少有一个一个True和一个False")bashplotlib你有没有想过在控制台中绘制图形?Bashplotlib是一个Python库,可以帮助我们在命令行(粗糙环境)上绘制数据。#moduleinstallpipinstallbashplotlib#plotinstanceimportnumpyasnpfrombashplotlib.histpgramimportplot_histarr=np.ramdom.normal(size=1000,loc=0,scale=1)plot_hist(arr,bincount=50)collectionsPython有一些很棒的默认数据类型,但有时它们行为并不完全符合您的期望。幸运的是,Python标准库提供了集合模块[1]。这个方便的插件为您提供了更多的数据类型。fromcollectionsimportOrderedDict,Counter#记住添加键的顺序!x=OrderedDict(a=1,b=2,c=3)#计算每个字符出现的频率y=Counter("HelloWorld!")dir有没有想过如何查看Python对象内部并查看它具有哪些属性?在命令行键入:dir()dir("HelloWorld")dir(dir)当以交互方式运行Python并动态探索您正在使用的对象和模块时,这可能是一个非常有用的功能。Emojiemoji[3]是日本无线通信中使用的一种视觉情感符号。图是指图片,文字是指文字。它可以用来表示多种表情,比如笑脸代表笑,蛋糕代表食物等等。在中国大陆,emoji通常被称为“小黄脸”,或者简称为emoji。#installmodulepipinstallemoji#makeatryfromemojiimportemojizeprint(emojize(":thumbs_up:"))from__future__importPython流行的后果之一,总是有新版本在开发中。新版本意味着新功能——除非您的版本已过时。不过别担心。使用__future__模块[4]帮助您导入具有未来版本的Python的函数。从字面上看,这就像时间旅行或魔法之类的。from__future__importprint_functionprint("HelloWorld!")geogy地理,对大多数程序员来说是一个具有挑战性的领域。在获取地理信息或者绘制地图的时候,也会遇到很多问题。geopy模块[5]使与地理相关的内容变得非常容易。pipinstallgeopy它通过抽象一系列不同地理编码服务的API来工作。有了它,您可以获得一个地方的完整街道地址、纬度、经度,甚至海拔高度。还有一个有用的距离类。它以您首选的测量单位计算两个位置之间的距离。fromgeopyimportGoogleV3place="221bBakerStreet,London"location=GoogleV3().geocode(place)print(location.address)print(location.location)howdoi使用terminal终端编程时,遇到问题会在StackOverflow上搜索答案,以及然后返回终端继续编程。这时候,有时候你不记得你之前找到的解决方案了。这时候你需要再去查一下StackOverflow,又不想离开终端。那么这个时候就需要用到这个好用的命令行工具howdoi[6]。如果您对pipinstallhowdoi有任何疑问,您可以询问它,它会尽力回复。howdoverticalaligncsshowdoiforloopinjavahowdoiundocommitsingit但请注意-它从StackOverflow上的最佳答案中获取代码。它可能并不总是提供最有用的信息……howdoiexitviminspectPython的检查模块[7]非常适合了解幕后发生的事情。你甚至可以调用它自己的方法!下面的代码示例inspect.getsource()用于打印自己的源代码。inspect.getmodule()也用于打印定义它的模块。最后一行代码打印出它自己的行号。importinspectprint(inspect.getsource(inspect.getsource))print(inspect.getmodule(inspect.getmodule))print(inspect.currentframe().f_lineno)当然,除了这些琐碎的用途之外,inspect模块对于理解您的代码也很有用在做什么是有用的。您还可以使用它来编写自文档化代码。JediJedi库是一个自动完成和代码分析库。它使编写代码更快、更高效。除非您正在开发自己的IDE,否则您可能会对使用Jedi[8]作为编辑器插件感兴趣。幸运的是,这已经有可用的负载了!**kwargs学习任何语言都有很多里程碑。使用Python并理解神秘的**kwargs语法可能算作一个重要的里程碑。字典对象前面的双星号**kwargs[9]允许您将该字典的内容作为命名参数传递给函数。字典的键是参数名,值是传递给函数的值。你甚至不需要称它为kwargs!dictionary={"a":1,"b":2}defsomeFunction(a,b):print(a+b)return#这些做同样的事情:someFunction(**dictionary)someFunction(a=1,b=2)当您想编写可以处理未预定义的命名参数的函数时,这很有用。关于Python编程,我最喜欢的事情之一是它的列表理解[10]。这些表达式让编码变得很容易,非常流畅,几乎就像自然语言一样。numbers=[1,2,3,4,5,6,7]evens=[xforxinnumbersifx%2is0]odds=[yforyinnumbersifynotinevens]cities=['伦敦','都柏林','奥斯陆']defvisit(城市):打印("Welcometo"+city)forcityincities:visit(city)mapPython通过许多内置功能支持函数式编程。最有用的map()函数之一是函数——尤其是与lambda函数结合使用时[11]。x=[1,2,3]y=map(lambdax:x+1,x)#printout[2,3,4]print(list(y))在上面的例子中,map()将是一个简单的应用于x的lambda函数。它返回一个映射对象,该对象可以转换为一些可迭代对象,例如列表或元组。newspaper3k如果您还没有看到它,请准备好被Python报纸模块[12]震撼。它使您能够从一系列领先的国际出版物中检索新闻文章和相关元数据。您可以搜索图像、文本和作者姓名。它甚至有一些内置的NLP函数[13]。因此,如果您正在考虑为您的下一个项目使用BeautifulSoup或其他一些DIY网络抓取库,使用此模块可以节省大量时间和精力。pipinstallnewspaper3kOperatoroverloadingPython提供[14]对运算符重载的支持,这是让您听起来像一个合法计算机科学家的术语之一。这实际上是一个简单的概念。有没有想过为什么Python允许您使用+运算符来添加数字和连接字符串?这就是运算符重载的作用。您可以按照自己的特定方式定义使用Python标准运算符表示法的对象。您可以在与您正在使用的对象相关的上下文中使用它们。classThing:def__init__(self,value):self.__value=valuedef__gt__(self,other):returnsself.__value>other.__valuedef__lt__(self,other):returnsself.__valuenothing#Falsesomething>>file=open('file.txt','r')>>>print(file)这使得调试代码更容易。将其添加到您的类定义中,如下所示:classsomeClass:def__repr__(self):return""someInstance=someClass()#printprint(someInstance)shPython是一种很棒的脚本语言。使用标准操作系统和子进程库有时会让人头疼。SH库[17]让您可以像调用普通函数一样调用任何程序——这对于自动化工作流和任务非常有用。importshsh.pwd()sh.mkdir('new_folder')sh.touch('new_file.txt')sh.whoami()sh.echo('Thisisgreat!')类型提示Python是一种动态类型语言。在定义变量、函数、类等时不需要指定数据类型。这样可以缩短开发时间。但是,没有什么比简单的输入问题引起的运行时错误更烦人的了。从Python3.5[18]开始,您可以选择在定义函数时提供类型提示。defaddTwo(x:Int)->Int:returnx+2你也可以定义类型别名。fromtypingimportListVector=List[float]Matrix=List[Vector]defaddMatrix(a:Matrix,b:Matrix)->矩阵:result=[]fori,rowinenumerate(a):result_row=[]forj,colinenumerate(row):result_row+=[a[i][j]+b[i][j]]result+=[result_row]returnresultx=[[1.0,0.0],[0.0,1.0]]y=[[2.0,1.0],[0.0,-2.0]]z=addMatrix(x,y)虽然不是强制的,但是类型注释可以让你的代码更容易理解。它们还允许您使用类型检查工具在运行它们之前捕获那些杂散的TypeError。如果您正在处理大型、复杂的项目,这将非常有用!uuid通过Python标准库的uuid模块[19]生成通用唯一ID(或“UUID”)的快速简便方法。importuuiduser_id=uuid.uuid4()print(user_id)这将创建一个几乎肯定是唯一的随机128位数字。事实上,可以生成超过2122个可能的UUID。这超过了五位小数(或5,000,000,000,000,000,000,000,000,000,000,000,000)。在给定集中找到重复项的概率极低。即使有1万亿个UUID,重复的可能性也远低于十亿分之一。虚拟环境您可以同时处理多个Python项目。不幸的是,有时两个项目会依赖于相同依赖项的不同版本。你在你的系统上安装了什么?幸运的是,Python支持虚拟环境[20],因此您可以两全其美。从命令行:python-mvenvmy-projectsourcemy-project/bin/activatepipinstallall-the-modules现在您可以在同一台机器上运行独立版本并安装Python。wikipedia维基百科有一个很棒的AP??I,它允许用户以编程方式访问无可匹敌且完全免费的知识和信息。维基百科模块[21]使访问此API非常方便。importwikipediaresult=wikipedia.page('freeCodeCamp')print(result.summary)forlinkinresult.links:print(link)与真实站点一样,该模块提供多语言支持、页面消歧、随机页面检索,甚至还有一个donate()方法。xkcd幽默是Python语言的一个关键特性,以英国喜剧小品节目PythonFlyingCircus[22]命名。Python的大部分官方文档都引用了该节目最著名的草图。不过,Python的幽默不仅限于文档。尝试运行以下行:importantgravityYAMLYAML[23]指的是“非标记语言”。它是一种数据格式化语言,是JSON的超集。与JSON不同,它可以存储更复杂的对象并引用它自己的元素。还可以写注释,特别适合写配置文件。PyYAML模块[24]允许您将YAML与Python结合使用。安装然后导入到您的项目中:pipinstallpyyamlimportyamlPyYAML允许您存储任何数据类型的Python对象,以及任何用户定义类的实例。zip的结局也是一个很棒的模块。你有没有遇到过需要从两个列表中形成一个字典?keys=['a','b','c']vals=[1,2,3]zipped=dict(zip(keys,vals))zip()内置函数接受一个可迭代对象数组,并返回元组列表。每个元组按位置索引对输入对象的元素进行分组。您还可以通过调用*zip()来“解压缩”一个对象。写在最后Python是一种非常多样化且发展良好的语言,因此必然有许多我没有考虑到的特性。如果想了解更多python模块,可以参考awesome-python[25]。