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

这些Python编码技巧,你一定不知道

时间:2023-03-20 00:06:09 科技观察

Python是世界上最流行和最受欢迎的编程语言之一,原因有很多,比如:简单易学超高的通用性拥有大量的模块和库本文将分享一些Python用法技巧,从A-Z顺序排列。alloranyPython如此受欢迎的原因之一是它的可读性和表现力。人们也经常戏称Python为“可执行伪代码(executablepseudocode)”。但是,当您可以编写如下代码时,很难反驳此声明:x=[True,True,False]ifany(x):print("AtleastoneTrue")ifall(x):print("NotoneFalse")ifany(x)andnotall(x):print("AtleastoneTrueandoneFalse")bashplotlib想在控制台画图?$pipinstallbashplotlib使用上面的行在控制台中绘制。collectionsPython有一些很棒的默认数据类型,但有时它们可??能不是您想要的。但是,Python标准库提供了collections模块。这个方便的插件为您提供了更多的数据类型。集合模块:https://docs.python.org/3/library/collections.htmlfromcollectionsimportOrderedDict,Counter#Rememberstheorderthekeysareadded!x=OrderedDict(a=1,b=2,c=3)#Countsthefrequencyofeachcharactery=Counter("HelloWorld!")dir你有没有想过如何查看Python对象的内部以及它有哪些属性?输入以下命令行:>>>dir()>>>dir("HelloWorld")>>>dir(dir)当以交互方式运行Python时,这可能是一个非常有用的功能,并且可以动态地探索您正在访问的对象和模块使用。要了解更多信息,请单击此处:https://docs.python.org/3/library/functions.html#diremoji是的,有。点击这里:https://pypi.org/project/emoji/$pipinstallemoji别以为我不知道你会偷偷试试→→fromemojiimportemojizeprint(emojize(":thumbs_up:"))from__future__importPython流行一个,结果总是有新的版本被开发出来。新版本意味着新功能——除非你的版本已经过时了。不过别担心。__future__模块允许用户从较新版本的Python导入功能。这几乎就像时间旅行,或者魔法什么的。__future__模块:https://docs.python.org/2/library/*future*.htmlfrom__future__importprint_functionprint("HelloWorld!")geopy地理(Geography)对于程序员来说可能是一个具有挑战性的领域。但是geopy模块让它变得非常简单。geopy模块:https://geopy.readthedocs.io/en/latest/$pipinstallgeopy它通过抽象一系列不同的地理编码服务的API来工作,允许用户获取一个地方的完整街道地址、纬度、经度,甚至高度。另一个有用的功能是距离:它以您喜欢的测量单位计算两个位置之间的距离。fromgeopyimportGoogleV3place="221bBakerStreet,London"location=GoogleV3().geocode(place)print(location.address)print(location.location)我怎么会遇到编码问题,不记得以前见过的解决方案?需要查看StackOverflow但又不想离开终端?那么你需要这个有用的命令行工具:https://github.com/gleitz/howdoi。$pipinstallhowdoi向它提出任何问题,它会尽力回答。$howdoverticalaligncss$howdoiforloopinjava$howdoiundocommitsingit但请注意-它从StackOverflow上投票最多的答案中获取代码。也就是说,它提供的信息并不总是有用的...$howdoiexitviminspectPython的检查模块对于理解问题背后的细节非常有帮助。您甚至可以在inspect模块上调用它的方法!inspect模块:https://docs.python.org/3/library/inspect.html下面的代码示例使用inspect.getsource()来打印自己的源代码。它还使用inspect.getmodule()打印定义它的模块。***一行代码打印出自己的行号。importinspectprint(inspect.getsource(inspect.getsource))print(inspect.getmodule(inspect.getmodule))print(inspect.currentframe().f_lineno)当然除了这些琐碎的用法,inspect模块还可以帮助大家理解代码正在做。您还可以使用它来编写自文档化代码。JediJedi库是一个自动完成和代码分析库。它使编码更快、更高效。除非您正在开发自己的IDE,否则您肯定会对使用Jedi库作为编辑插件感兴趣。Jedi:https://jedi.readthedocs.io/en/latest/docs/usage.html您可能已经在使用Jedi。IPython项目使用Jedi来完成代码。**kwargs学习任何语言都有很多里程碑。对于Python,理解神秘的**kwargs语法可能是其中之一。字典对象前面的双星号允许您将该字典的内容作为命名参数传递给函数。字典的键是参数名,值是传递给函数的值。你甚至不需要称它为kwargs!dictionary={"a":1,"b":2}defsomeFunction(a,b):print(a+b)return#thesedothesamething:someFunction(**dictionary)someFunction(a=1,b=2)这个当您想编写可以处理以前未定义的命名参数的函数时,它很有用。列表理解关于Python编程,我最喜欢的事情之一是它的列表理解(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。这些表达式使编写清晰易读的代码变得很容易,这些代码读起来几乎像自然语言。有关它们的使用的更多信息,请参阅:https://www.learnpython.org/en/List_Comprehensionsnumbers=[1,2,3,4,5,6,7]evens=[xforxinnumbersifx%2is0]odds=[yforyinnumbersifynotinevens]cities=['London','Dublin','Oslo']defvisit(city):print("Welcometo"+city)forcityincities:visit(city)mapPython通过许多内置功能支持函数式编程。map()函数是最有用的函数之一——尤其是与lambda函数结合使用时。lambda函数:https://docs.python.org/3/tutorial/controlflow.html#lambda-expressionsx=[1,2,3]y=map(lambdax:x+1,x)#printsout[2,3,4]print(list(y))在上面的示例中,map()将一个简单的lambda函数应用于x中的每个元素。它返回一个映射对象,该对象可以转换为可迭代对象,例如列表或元组。newspaper3k如果你之前没有看过,那我建议你先看看:https://pypi.org/project/newspaper3k/。它可以帮助您从大量国际顶级出版物中检索新闻文章和相关元数据。您可以搜索图像、文本和作者姓名。它还具有一些内置的NLP功能。地址:https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article如果您想在下一个项目中使用BeautifulSoup或其他DIY网络抓取库,那么为什么不使用$pipinstallnewspaper3k省时省力,何乐而不为呢?运算符重载(Operatoroverloading)Python支持运算符重载。这实际上是一个简单的概念。你有没有想过为什么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)这样代码调试就容易多了。将字符串添加到类定义中,如下所示:和子进程库有点棘手。sh库提供了一个不错的选择。sh库:http://amoffat.github.io/sh/这个库允许用户像调用普通函数一样调用任意程序,这对于自动化工作流和任务非常有用。fromshimport*sh.pwd()sh.mkdir('new_folder')sh.touch('new_file.txt')sh.whoami()sh.echo('Thisisgreat!')类型提示(Typehints)Python是一个动态的语言。定义变量、函数、类等时无需指定数据类型,有助于缩短开发周期。然而,由简单的输入问题引起的运行时错误真的很烦人。从Python3.5开始,用户可以选择在定义函数时启用类型提示。defaddTwo(x:Int)->Int:returnx+2您还可以定义类型别名:fromtypingimportListVector=List[float]Matrix=List[Vector]defaddMatrix(a:Matrix,b:Matrix)->Matrix:result=[]fori,rowinenumerate(a):result_row=[]forj,colinenumerate(row):result_row+=[a[i][j]+b[i][j]]result+=[result_row]返回结果x=[[1.0,0.0],[0.0,1.0]]y=[[2.0,1.0],[0.0,-2.0]]z=addMatrix(x,y)虽然不是强制的,但是类型注解可以让代码更容易理解。它们还允许您在运行它们之前使用类型检查工具捕获类型错误。在处理大型复杂项目时,这样做是值得的。uuid生成通用唯一ID(UUID)的一种快速简便的方法是使用Python标准库的uuid模块。uuid模块:https://docs.python.org/3/library/uuid.htmlimportuuiduser_id=uuid.uuid4()print(user_id)这会创建一个几乎必然唯一的随机128位数字。事实上,可以生成2122个可能的UUID。这个数字超过5,000,000,000,000,000,000,000,000,000,000,000,000。在给定集合中找到重复数字的概率极低。即使有1万亿个UUID,出现重复数字的可能性也远低于十亿分之一。虚拟环境(Virtualenvironment)这可能是我在Python中最喜欢的东西。您可能同时在处理多个Python项目。不幸的是,有时两个项目依赖于相同依赖项的不同版本。那么你想安装哪个版本?幸运的是,Python支持虚拟环境,这允许用户利用这两种环境。请参阅以下行:python-mvenvmy-projectsourcemy-project/bin/activatepipinstallall-the-modules现在您在一台机器上拥有独立的多个Python版本。问题解决了!wikipediaWikipedia有一个很棒的AP??I,允许用户以编程方式访问大量免费知识和信息。wikipedia模块使得访问API非常方便。维基百科模块:https://wikipedia.readthedocs.io/en/latest/quickstart.htmlimportwikipediaresult=wikipedia.page('freeCodeCamp')print(result.summary)forlinkinresult.links:print(link)类似于真正的维基百科网站,它支持多种语言、页面消歧、随机页面检索,甚至还有一个donate()方法。xkcdhumour是Python语言的一个关键特性,以英国喜剧《蒙提·派森的飞行马戏团》(MontyPythonandtheFlyingCircus)命名。Python的官方文档很多都引用了喜剧***的情节。幽默感不仅限于文档。尝试运行以下行:importantgravity将打开xkcd绘制的Python卡通。不要改变这个,Python。不要改变。YAMLYAML代表“YAML不是标记语言”。它是一种数据格式化语言,是JSON的超集。与JSON不同,它可以存储更复杂的对象并引用它自己的元素。您还可以编写注释,这对于编写配置文件特别有用。PyYAML模块(https://pyyaml.org/wiki/PyYAMLDocumentation)允许您在Python中使用YAML。安装:$pipinstallpyyaml然后导入到你的项目中:importyamlPyYAML使你能够存储任何数据类型的Python对象,以及任何用户定义类的实例。Zip给你一个技巧,很酷。你还在用两个列表组成字典吗?keys=['a','b','c']vals=[1,2,3]zipped=dict(zip(keys,vals))zip()内置函数将多个可迭代对象作为输入并返回元组列表。每个元组按位置索引对输入对象的元素进行分组。您还可以通过调用*zip()来“解压缩”对象。原文链接:https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747:almosthuman2014)》]点此阅读本作者更多好文