当前位置: 首页 > 后端技术 > Python

认识python【今天开始写代码】Lesson7

时间:2023-03-26 19:13:45 Python

参考来源:Vitu.AI在这节课中,让我们了解关于python最好的事情之一(特别是如果你是或想成为一名数据科学家),即拥有大量高质量的自定义库。让我们看一下python中的导入,提供一些使用不熟悉的库(及其返回的对象)的技巧,并对运算符重载(python的核心部分)有一个初步的了解。Import一些库在“标准库”中,这意味着我们在运行python的任何地方都可以找到它们,而另一些库,虽然不是python直接提供的,但我们可以通过import轻松添加。我们先看看如何从标准库中导出我们想要的库:importmathprint("It'smath!Ithastype{}".format(type(math)))是的,math是一个模块(module)。一个模块是由一系列的值和变量组成的。我们可以使用内置函数dir()来查看math中所有的变量名:dir(math)在pyhton的语法中,我们可以使用点(·)来调用这些变量。有的直接引用简单的值,比如:math.pi结合str.format来个有趣的尝试:print("pito4significantdigits={:.4}".format(math.pi))inmath模块,除了values,还有更多的功能,比如:math.log(32,2)当然,如果我们不知道math.log()是干什么的,可以调用help()查找答案:help(math.log)我们也可以在模块本身上调用help()。这将为我们提供模块中所有函数和值的组合文档(以及特定于模块的描述)。让我们看看python是如何描述模块math的其他语法的:help(math)import如果我们知道我们会经常使用模块math中的函数,我们可以在导入这个模块时给它起一个更短的别名。节省一些打字。虽然“数学”已经很短了,但在接下来的课程中我们还会遇到其他的库,比如金融分析师和数据科学家常用的pandas、numpy、tensorflow和matplotlib。importmathasmtmt.pias可以帮助我们在导入模块的时候重命名这个模块,例如:#我们通常约定这样命名下面的模块:importnumpyasnyimportpandasaspd除了as,我们还可以这样做:importmathmt=mathmt.pi即使我们使用更短的模块别名,每次调用一个函数时,我们仍然要告诉python这个函数属于哪个模块。那么有没有办法让我们直接调用函数呢?我们可以不通过math.pi直接调用pi吗?我们来看看如何解决这个问题:frommathimport*print(pi)print(log(32,2))import*允许我们直接调用这个模块中的所有变量和值(没有任何点行前缀变量)。但是,这并非始终适用。frommathimport*fromnumpyimport*print(pi)print(log(32,2))这是怎么回事?为什么python会突然出错?这个import*有时会导致像这样的奇怪且难以调试的情况发生。上述代码的问题在于math和numpy模块都有一个名为log的函数,但它们具有不同的语义。因为我们后面从numpy导入log,它会覆盖我们从math导入的log变量。一个好的折衷方案是只从每个模块导入我们需要的特定内容:frommathimportlog,pifromnumpyimportasarrayprint(pi)print(log(32,2))submodules到目前为止我们已经看到一个模块可以包含一系列函数或值。值得注意的是,一个模块中的变量也可以指向其他模块,这样的模块称为子模块。让我们看一个例子:importnumpyprint("numpy.randomisa",type(numpy.random))print("itcontainsnamessuchas...",dir(numpy.random)[-25:-20])因此,如果我们像上面那样导入numpy模块,调用random子模块中的函数将需要两个点(numpy.random.randint())。#掷骰子十次importnumpyrolls=numpy.random.randint(low=1,high=6,size=10)print(rolls)print(type(rolls))如何理解一个库?在上面的代码单元中,我们看到了一个新名词ndarray。虽然我们在本课程中从未见过类似的东西,但不要惊慌。帮你总结三部曲学习新东西。type()dir()help()下面我们一一分析。第一步:type()type()会告诉我们这个东西的类型:print(type(rolls))第二步:dir()dir()会告诉我们这个新东西如何使用:print(dir(rolls))#求掷十次骰子的平均大小rolls.mean()#将这个数组转换成我们熟悉的列表rolls.tolist()第三部分:help()help()会告诉我们更多关于这个东西的更多信息,包括这个东西的具体使用方法和相关函数:help(rolls.mean)operatoroverloading我们先看一个例子:[3,4,1,2,2,1]+10是的,python当然会报错。上节课我们讲清楚了,即使是神奇的加号(+)也只能连接同一类型的值。例如:str+strint/float+int/floatlist+list那么,下面的代码可以成功运行:print(rolls+10)列表(list)的设计者决定不允许直接用plus处理列表和数字迹象。但是numpy的数组(array)采用了不同的做法,我们可以给数组的每个元素添加数字。让我们看几个例子:#在十次随机掷骰子的情况下,哪个掷骰数小于或等于3?print(rolls<=3)xlist=[[1,2,3],[2,4,6]]xarray=numpy.asarray(xlist)#还记得print()中的参数是怎么换行的吗?print("list={}\narray=\n{}".format(xlist,xarray))#我们得到这个数组中第二行的最后一个元素x[1,-1]#同样的方法可以吗获取此列表中第二个子列表的最后一个元素?#答案是否定的,python会报错xlist[1,-1]numpy模块中的ndarray类型是专门用来处理多维数据的,所以定义了自己的索引逻辑,让我们可以通过一个来指定每个维度元组索引索引。了解nupmy中数组的运算符重载是不是很有趣?我们来看看通用语言机器学习模块tensorflow中的运算符重载。#创建两个常量值1a=tf.constant(1)b=tf.constant(1)#将它们相加print(a+b)a+bisnotequalto2根据tensorflow的帮助文档,这是一个符号符号,用于表示此操作的结果之一。它不保存运算输出的值,而是在tensorflowtf.session中提供计算这些值的方法。让我们简单了解一下运算符如何应用于pandasDataFrames。df[(df['population']>10**6)&(df['continent']=='SouthAmerica')]看起来复杂吗?没关系,我们不需要在本课中了解这些。重要的是要认识到不同的库有不同的使用和输出运算符的方式。了解python的运算符在应用于整数、字符串和列表时的工作方式并不能保证我们可以立即了解它们在应用于其他库(如tensorflow、numpy或pandas)时的工作方式。那么上了七堂课,相信你已经熟悉了四种数值类型,即int、float、bools和string,三种数据结构,即list、tuple和dict,以及运算符,即加号(+)和乘法的使用符号(*)等。但是我们掌握Python的旅程才刚刚开始。我们还可以学习更多相关的课程,比如pandas和numpy会为我们提供强大的数据框(Dataframe)和序列(Series)matplotlib会通过子图(Subplots)、图表(Figures)、刻度线(TickMarks)和图形注释(Annotations)帮助我们如何画图,机器学习,如何应用python实践祝好运!原文地址:认识pyhon【今天开始写代码】第7课