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

Python语法和机器学习开发环境的快速概述

时间:2023-03-15 08:31:08 科技观察

PythonPython是一种高级、动态类型、多范式编程语言。人生苦短,请使用Python,大量强大的语法糖使得Python代码在很多情况下看起来有点像伪代码。例如,与Java相比,我们用Python实现的简单快速排序将非常简短和紧凑:defquicksort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)/2]left=[xforxinarrifxpivot]returnquicksort(left)+middle+quicksort(right)printquicksort([3,6,8,10,1,2,1])#Prints”[1,1,2,3,6,8,10]"Python版本Python社区最大的问题是版本分裂。这是我总觉得有点鸡肋的地方,毕竟对处女座来说真的很不舒服。Python社区目前有两个不同的主要版本:2.7和3.4。Python3.0引入了许多向后不兼容的更改,因此2.7之后的许多代码将无法在3.4中使用。我们可以使用python--version命令查看当前使用的版本。常用的自定义模块注意换行反斜杠()接上一行,Python文件是以模块的形式组织的。Python程序语句不以分号结尾,而是以换行符结尾。Python使用硬回车来分隔语句,使用冒号和缩进来分隔代码块。C++和Java使用分号分隔语句,使用花括号分隔代码块。评论使用#符号来标记注释;b.出于文档目的,在模块、类或函数的开头添加一个字符串;C。使用三重引号来标记注释。print"""Usage:thingy[OPTIONS]-h显示这个用法信息-Hhostname要连接的主机名"""Python主进程中没有子程序,只有函数,所有函数都有返回值,所有函数都是Start与高清。字符串Python中单引号和双引号的区别和PHP类似,双引号可以包含单引号。ArrayPython中数组的下标可以为负数,即从右端开始计算,-1为最后一个数。Python不能修改数组中的值,字符串下标索引方式与MATLAB类似。FunctionsPython函数可以嵌套定义安装:环境搭建Conda作者推荐Anaconda作为环境搭建工具,Python3.5版本,可以在这里下载。如果习惯使用Docker,可以参考anaconda-notebookdockerpullrothnic/anaconda-notebookdockerrun-p8888:8888-i-trothnic/anaconda-notebook安装完成后,可以使用如下命令验证是否安装完成:conda--version安装完成后,我们就可以创建一个具体的开发环境,主要是通过create命令创建一个新的独立环境:condacreate--namesnowflakesbiopython这个命令会创建一个名为snowflakes的环境,并安装Biopython。如果需要切换到这个开发环境,可以使用activate命令:Linux,OSX:sourceactivatesnowflakesWindows:activatesnowflakes我们也可以在创建环境的时候指定是使用python2还是python3:condacreate--namebunniespython=3astroidbabel之后环境创建好了,我们可以使用info命令查看所有环境:condainfo--envscondaenvironments:snowflakes*/home/username/miniconda/envs/snowflakesbunnies/home/username/miniconda/envs/bunniesroot/home/username/miniconda当我们切换到特定的环境,我们可以安装依赖包:condalist#列出当前环境下所有的依赖包condainstallnltk#安装一个新的依赖JupyterNotebookConda安装好之后,默认安装了JupyterNotebook,直接在工作目录:jupyternotebook基本数据类型和其他主流语言一样,Python为我们提供了很多基本类型包括integer,float,boolean,s特林斯等数值类型x=3printtype(x)#Prints""printx#Prints"3"printx+1#Addition;prints"4"printx-1#Subtraction;prints"2"printx*2#Multiplication;prints"6"printx**2#Exponentiation;prints"9"x+=1printx#Prints"4"x*=2printx#Prints"8"y=2.5printtype(y)#Prints""printy,y+1,y*2,y**2#Prints"2.53.55.06.25"但是需要注意的是Python没有x++或者x--这样的自增或者自减运算符。另外,Python的内置还提供了长整型等复杂数值类型的集成,可以参考这里。布尔类型Python提供了常用的逻辑运算符,但需要注意的是&&、||等在Python中不使用,而是直接使用英文单词。t=Truef=Falseprinttype(t)#Prints""printtandf#LogicalAND;打印"False"printtorf#LogicalOR;打印"True"printnott#LogicalNOT;打印"False"printt!=f#LogicalXOR;打印"True"stringPython对字符串的支持还是很好的,但是需要注意utf-8编码的问题。你好='你好'#Stringliteralscanusesinglequotesworld="world"#ordoublequotes;itdoesnotmatter.printhello#Prints"hello"printlen(hello)#Stringlength;prints"5"hw=hello+''+world#Stringconcatenationprinthw#prints"helloworld"hw12='%s%s%d'%(hello,world,12)#sprintfstylestringformattingprinthw12#prints"helloworld12"Python中的字符串对象也包含很多有用的方法,例如:s="hello"prints.capitalize()#Capitalizeastring;prints"Hello"prints.upper()#Convertastringtouppercase;prints"HELLO"prints.rjust(7)#Right-justifyastring,paddingwithspaces;prints"hello"prints.center(7)#Centerastring,paddingwithspaces;prints"hello"prints.replace('l','(ell)')#Replaceallinstancesofonesubstringwithanother;#prints"he(ell)(ell)o"print'world'.strip()#Stripleadingandtrailingwhitespace;prints"world"可以在这里详细查看方法列表。复杂数据类型的列表Python中的列表相当于一个数组,但是它可以动态扩展,可以存储不同类型的值。xs=[3,1,2]#Createalistprintxs,xs[2]#Prints[3,1,2]2"printxs[-1]#Negativeindicescountfromtheendofthelist;prints"2"xs[2]='foo'#Listscancontainelementsofdifferenttypesprintxs#Prints[3,1,'foo']"xs.append('bar')#Addanewelementtotheendofthelistprintxs#Prints"[3,1,'foo','bar']"x=xs.pop()#Removeandreturnthelastelementofthelistprintx,xs#Prints"bar[3,1,'foo']"您还可以在文档中查看更多详细信息。切片Python中对数组的访问也相当人性化,通过简单的操作符就可以完成对数组中子数组的截取。nums=range(5)#rangeisabuilt-infunctionthatcreatesalistofintegersprintnums#Prints[0,1,2,3,4]"printnums[2:4]#Getaslicefromindex2to4(exclusive);prints"[2,3]"printnums[2:]#Getaslicefromindex2totheend;prints[2,3,4]"printnums[:2]#Getaslicefromthestarttoindex2(独占);prints"[0,1]"printnums[:]#Getasliceofthewholelist;prints["0,1,2,3,4]"printnums[:-1]#Sliceindicescanbenegative;prints["0,1,2,3]"nums[2:4]=[8,9]#Assignanewsublisttoasliceprintnums#Prints"[0,1,8,9,4]"遍历可以使用基本的for循环遍历数组中的元素,就像下面的样纸:animals=['cat','dog','monkey']foranimalinanimals:printanimal#Prints"cat",“狗”,“猴子”,每一条线。如果想在循环时获取当前元素的下标,可以使用枚举函数:animals=['cat','dog','monkey']foridx,animalinenumerate(animals):print'#%d:%s'%(idx+1,animal)#Prints"#1:cat","#2:dog","#3:monkey",每次nitsownline变换在编程中我们经常需要变换数组,越出名的我们可以使用地图,减少,filter的这些函数在Python中提供了一个非常方便的ListComprehension运算符比如我们需要依次对数组中的元素求平方nums=[0,1,2,3,4]squares=[]forxinnums:squares.append(x**2)printsquares#Prints[0,1,4,9,16]我们可以简写如下:nums=[0,1,2,3,4]squares=[x**2forxinnums]printsquares#Prints[0,1,4,9,16]ListComprehensions也支持条件选择:nums=[0,1,2,3,4]even_squares=[x**2forxinnumsifx%2==0]printeven_squares#Prints[0,4,16]"dictionaryPython中的字典类型类似于Java中的Map或JavaScript中的Object,也就是所谓的键值对类型,基本用法是:d={'cat':'cute','dog':'furry'}#Createanewdictionarywithsomedataprintd['cat']#Getanentryfromadictionary;prints"cute"print'cat'ind#Checkifadictionaryhasagivenkey;prints"True"d['fish']='wet'#Setanentryinadictionaryprintd['fish']#Prints"wet"#printd['monkey']#KeyError:'monkey'notakeyofdprintd.get('monkey','N/A')#Getanelementwithdefault;prints"N/A"printd.get('fish','N/A')#Getanelementwithdefault;prints"wet"deld['鱼']#Removeeanelementfromadictionaryprintd.get('fish','N/A')#"fish"isnolongerakey;prints"N/A"吨;字典遍历也很简单:d={'person':2,'cat':4,'spider':8}foranimalind:legs=d[animal]print'A%shas%dlegs'%(animal,legs)#Prints"Apersonhas2legs","Aspiderhas8legs","Acadhas4legs"如果想同时访问key及其对应的value,可以使用iteritems方法:d={'person':2,'cat':4,'蜘蛛':8}foranimal,legsind.iteritems():print'A%shas%dlegs'%(animal,legs)#Prints"Apersonhas2legs","Aspiderhas8legs","Acadhas4legs"transformnums=[0,1,2,3,4]even_num_to_square={x:x**2forxinnumsifx%2==0}printeven_num_to_square#Prints"{0:0,2:4,4:16}"SetSet是无序且唯一元素的集合:animals={'cat','dog'}print'cat'inanimals#Checkifanelementisinaset;prints"True"print'fish'inanimals#prints"False"animals.add('fish')#Addanelementtoasetprint'fish'inanimals#Prints“真”printlen(animals)#Numberofelementsinaset;prints"3"animals.add('cat')#Addinganelementthatisalreadyinthesetdoesnothingprintlen(animals)#Prints"3"animals.remove('cat')#删除elementfromasetprintlen(animals)#Prints"2"遍历集合遍历的语法和数组遍历很相似,但是由于集合本身是无序的,所以不能依赖遍历的顺序来预测集合中元素的顺序:animals={'cat','dog','fish'}foridx,animalinenumerate(animals):print'#%d:%s'%(idx+1,animal)#Prints"#1:fish","#2:dog","#3:cat"transformfrommathimportsqrtnums={int(sqrt(x))forxinrange(30)}printnums#Prints"set([0,1,2,3,4,5])"Python中的元组不能被指定为有序元素的可变集合,Tuple与列表非常相似,但不同的是,Tuple可以用作字典中的键类型,而列表不能d={(x,x+1):xforxinrange(10)}#Createadictionarywithtuplekeyst=(5,6)#Createatupleprinttype(t)#Prints""printd[t]#Prints"5"printd[(1,2)]#Prints"1"函数:Python中的函数是使用def关键字定义的,例如:defsign(x):ifx>0:return'positive'elifx<0:return'negative'else:return'zero'forxin[-1,0,1]:printsign(x)#打印出"negative","zero","positive"同时Python中的函数也支持可选参数:defhello(name,loud=False):icloud:print'HELLO,%s!'%name.upper()else:print'Hello,%s'%namehello('Bob')#Prints"Hello,Bob"hello('Fred',loud=True)#打印“你好,弗雷德!”):icloud:print'HELLO,%s!'%self.name.upper()else:print'Hello,%s'%self.nameg=Greeter('Fred')#ConstructaninstanceoftheGreeterclassg.greet()#Callaninstancemethod;prints“你好,弗雷德”g。问候(大声=True)#Callaninstancemethod;打印“HELLO,FRED!”