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

30个优秀的Python实践和技巧,你值得拥有~

时间:2023-03-16 00:15:07 科技观察

1.Python3使用提示:官方宣布2020年1月1日起不再支持Python2,本指南中的大部分示例也仅适用于Python3。如果您还在使用Python2.7,请立即更新。如果您使用的是Mac,则可以使用Homebrew轻松升级。2.查看最低要求的Python版本可以直接使用代码查看Python版本,保证以后不会出现脚本与Python版本不兼容的情况。参见示例:ifnotsys.version_info>(2,7):#berateyouruserforrunninga10year#pythonversionelifnotsys.version_info>=(3,5):#Kindlytellyouruser(s)heneedstoupgrade#becauseyou'rereusing3.5featuresviewrawcheck_python_version.pyhostedwith?byGitHub3.使用IPython作者的截图实际上,IPython是一个增强的shell。Autocomplete已经足够了不起了,但它还有更多的功能可以提供。我真的很喜欢内置的魔术命令。以下是一些示例:%cd-用于更改当前工作目录edit-打开编辑器并在关闭编辑器后执行您键入的代码%env-显示当前环境变量%pipinstall[pkgs]-交互式安装包%time和%timeit—计算Python代码的执行时间另一个有用的功能是引用前一个命令的输出。In和Out是实际对象。您可以使用Out[3]执行第三个命令的输出。下载用于安装Ipython的Python命令:pip3installipython4。列表推导式列表推导式可以替代用于填充列表的丑陋的for循环。列表理解的基本语法是:[expressionforiteminlistifconditional]这是一个最基本的例子,用数字序列填充列表:mylist=[iforiinrange(10)]print(mylist)#[0,1,2,3,4,5,6,7,8,9]viewrawlist_comprehensions_1.pyhostedwith?byGitHub同时,你也可以使用这个表达式进行数学运算:squares=[x**2forxinrange(10)]print(squares)#[0,1,4,9,16,25,36,49,64,81]viewrawlist_comprehensions_2.py由GitHub以?托管,甚至还创建了一个新函数:defsome_function(a):return(a+5)/2my_formula=[some_function(i)foriinrange(10)]print(my_formula)#[2,3,3,4,4,5,5,6,6,7]viewrawlist_comprehensions_3.py托管于?byGitHub最后,你可以使用“如果”过滤列表。本例只保留能被2整除的值filtered=[iforiinrange(20)ifi%2==0]print(filtered)#[0,2,4,6,8,10,12,14,16,18]viewrawlist_comprehensions_4.py由GitHub5以?托管。使用sys.getsizeof()查看对象的内存使用情况,可以查看对象的内存内存:importsysmylist=range(0,10000)print(sys.getsizeof(mylist))#48viewrawcheck_memory_usage_1.pyhostedwith?byGitHubWhy这么庞大的列表难道只占用48字节内存吗?这是因为range函数返回的类仅表现为列表。范围比使用实际的数字列表更节省内存。您可以自己使用列表理解来创建相同范围内的实际数字列表:importsysmyreallist=[xforxinrange(0,10000)]print(sys.getsizeof(myreallist))#87632viewrawcheck_memory_usage_2.py由GitHub6以?托管。Python中返回多个值一个函数可以返回多个变量而无需字典、列表或类。它是这样工作的:defget_user(id):#fetchuserfromdatabase#....returnname,birthdatename,birthdate=get_user(4)viewrawreturn_multiple_variables.pyhostedwith?byGitHub对于有限数量的返回值,这样就可以了。但是任何超过3个值的东西都应该进入一个(数据)类。7.使用数据类从3.7版本开始,Python提供了数据类。与常规类或其他替代方案(例如返回多个值或字典)相比,有几个优点:数据类需要最少的代码来比较数据类,因为_eq__已经实现您可以轻松地打印数据类调试,因为_repr__数据类需要类型提示,这减少了出错的机会。下面是一个数据类的例子:fromdataclassesimportdataclass@dataclassclassCard:rank:strsuit:strcard=Card("Q","hearts")print(card==card)#Trueprint(card.rank)#'Q'print(card)Card(rank='Q',suit='hearts'viewrawdataclass.py托管于?byGitHub单击此处获取高级指南。8.变量交换一个小技巧可以节省几行代码。dict1={'a':1,'b':2}dict2={'b':3,'c':4}merged={**dict1,**dict2}print(merged)#{'a':1,'b':3,'c':4}viewrawmerging_dicts.pyhostedwith?byGitHub如果有重叠的值,第一个字典中的值将被覆盖。10.Titlecase这只是有趣的玩法之一:mystring="10awesomepythontricks"print(mystring.title())'10AwesomePythonTricks'viewrawstring_to_titlecase.py由GitHub11与?托管。将字符串切割成列表可以将字符串拆分为字符串列表。在以下示例中,mystring="Thequickbrownfox"mylist=mystring.split('')print(mylist)#['The','quick','brown','fox']viewrawstring_to_list.py由GitHub12以?托管。从字符串列表创建字符串与之前的技巧相反,在本例中,从单词之间有空格的字符串列表创建字符串:mylist=['The','quick','brown','fox']mystring="".join(mylist)print(mystring)#'Thequickbrownfox'viewrawlist_to_string.pyhostedwith?byGitHub你可能在想为什么不使用mylist.join(""),问得好!最后,String.join()函数不仅可以加入列表,还可以加入任何可迭代的列表。将它放在一个String中可以防止在多个地方实现相同的功能。13.表情表情是高兴还是厌恶,取决于表情。此外,这在分析社交媒体数据时特别有用。首先,下载表情模块pip3installemoji后,可以执行以下操作:#128077;')print(result)#'Pythonis:thumbs_up:'viewrawemoji.py由GitHub14以?托管。制作listslicelistslice的语法:a[start:stop:step]Start、stop和step都是可用的Option。如果不设置,默认值为Startvalue0End是字符串的结尾stepvalue1下面是一个例子:#Wecaneasilycreateanewlistfrom#thefirsttwoelementssofalist:first_two=[1,2,3,4,5][0:2]print(first_two)#[1,2]#Andifweuseastepvalueof2,#wecanskipovereverysecondnumber#likethis:steps=[1,2,3,4,5][0:5:2]print(steps)#[1,3,5]#Thisworksonstringstoo.InPython,#youcantreatastringlikealistof#letters:mystring="abcdefdnnimt"[::2]print(mystring)#'acedit'viewrawlist_slicing.py由GitHub15以?托管。反转字符串和列表使用上面的切片符号来反转字符串或列表。通过使用负步长值-1来反转元素:revstring="abcdefg"[::-1]print(revstring)#'gfedcba'revarray=[1,2,3,4,5][::-1]print(revarray)#[5,4,3,2,1]viewrawreversing_stuff.py由GitHub16以?托管。显示小猫首先,安装Pillow(Python图像库的一个分支):pip3installPillow下载这张图片,并将其命名为kittens.jpg:图片来源TheDigitalArtistPixelx可以使用以下代码在Python代码中显示图像:或者直接使用IPython:fromPILimportImageim=Image.open("kittens.jpg")im.show()print(im.format,im.size,im.mode)#JPEG(1920,1357)RGBviewrawpillow.py由GitHub以?托管除了在显示图像时,Pillow还可以进行分析、调整大小、过滤、增强、变形等操作。请参阅文档了解其所有功能。17.使用map()Python的内置函数之一是map()。map()的语法是:map(function,something_iterable)给定一个要执行的函数和一些要运行的变量。它可以是任何可迭代的元素。在下面的示例中,我将使用一个列表。defupper(s):returns.upper()mylist=list(map(upper,['sentence','fragment']))print(mylist)#['SENTENCE','FRAGMENT']#Convertastringrepresentationof#anumberintoalistofints.list_of_ints=list(map(int,"1234567")))print(list_of_ints)#[1,2,3,4,5,6,7]viewrawmap.pyhostedwith?byGitHub自己看代码看看能不能在某处使用map()而不是循环!18.从列表和字符串中提取唯一元素通过使用set()函数创建集合,可以从列表或类列表对象中获取所有唯一元素:mylist=[1,1,2,3,4,5,5,5,6,6]print(set(mylist))#{1,2,3,4,5,6}#Andsinceastringcanbetreatedlikea#listofletters,youcanalsogetthe#uniquelettersfromastringthisway:print(set("aaabbbcccdddeeefff"))#{'a','b','c','d','e','f'}viewrawset.py由GitHub19以?托管。查找频率最高的值查找列表或字符串中出现频率最高的值:test=[1,2,3,4,2,2,3,1,4,4,4]print(max(set(test),key=test.count))#4viewrawmost_frequent.pyhostedwith?byGitHub你明白为什么会这样吗?在继续阅读之前尝试自己找出答案。还没试过?我要告诉你答案了。max()将返回列表中的最大值。key参数接受单个参数函数来自定义排序顺序,在本例中为test.count。该函数应用于可迭代对象上的每个项目。测试。count是一个内置的列表函数。它接受一个参数并将计算该参数的出现次数。所以test.count(1)会返回2,test.count(4)会返回4。set(test)返回test中所有的唯一值,所以{1,2,3,4}那么我们在做什么在这行代码中获取测试的所有唯一值,即{1,2,3,4}。接下来,max将应用list.count函数并返回最大值。20.创建进度条创建自己的进度条很有趣。但是使用进度包更快:pip3installprogress现在用更少的时间来创建进度条fromprogress.barimportBarbar=Bar('Processing',max=20)foriinrange(20):#Dosomeworkbar.next()bar.finish()viewrawprogress_bar。py由GitHub21以?托管。在交互窗口中使用_来获取最后一个带下划线运算符的表达式的结果,例如在IPython中是这样的:In[1]:3*3Out[1]:9In[2]:_+3Out[2]:12这也适用于Pythonshell。此外,IPythonshell允许使用Out[n]来获取[n]中表达式的值。例如,Out[1]会给出数字9。22.快速创建一个web服务器快速启动一个web服务器,服务于当前目录的内容:python3-mhttp.server如果你想与同事分享一些东西,或者想测试一个简单的这对HTML站点非常有用。23.多行字符串虽然可以在代码中使用三重引号将多行字符串括起来,但这并不理想。放在三引号之间的所有内容都变成一个字符串,包括格式,如下所示。我更喜欢第二种方法,它连接多行并允许您很好地格式化代码。唯一的缺点是您需要明确添加换行符。s1="""Multilinestringscanbeputbetweenentriplequotes.It'snotidealwhenformattingyourcodethough"""print(s1)#Multilinestringscanbeput#betweentriplequotes.It'snotideal#whenformattingyourcodethoughs2=("Youcanalsoconcatenatemultiple\n"+"stringsthisway,buttinyoullhavetos2)#Youcanalsoconcatenatemultiple#stringsthisway,但是你必须#explicitlyputinthenewlinesviewrawmultiline_strings.py由GitHub24以?托管。条件赋值的三元运算符这是使代码简洁易读的另一种方法:[on_true]if[expression]else[on_false]示例:x="Success!"if(y==2)else"Failed!"25.CalculateFrequencyUseCounterfromthecollectionslibrary得到一个包含列表中所有唯一元素计数的字典:fromcollectionsimportCountermylist=[1,1,2,3,4,5,5,5,6,6]c=Counter(mylist)print(c)#Counter({1:2,2:1,3:1,4:1,5:3,6:2})#Anditworksonstringstoo:print(Counter("aaaaabbbbbccccc"))#Counter({'a':5,'b':5,'c':5})viewrawcounter.py由GitHub26以?托管。链接coPython中的比较运算符链接比较运算符以创建更具可读性和简洁性的代码:x=10#Insteadof:ifx>5andx<15:print("Yes")#yes#Youcanalwrite:if5