摘要:本文收集了Python学习者常用的库和包,介绍了Python使用中的热门问题。01Python简介什么是Python?一种面向对象的高级动态可解释脚本语言。Python解释器一次读取一行代码,将其解释为低级机器语言(如字节码)并执行。·因此,这种语言经常会导致运行时错误。为什么选择Python(优点)·Python是目前最流行的语言,因为它更容易编码并且具有很强的可解释性。·Python是一种面向对象的编程语言,也可以用来编写一些功能代码。·Python非常适合弥合业务和开发人员之间的鸿沟。·与C#/Java等其他语言相比,Python程序的上市时间更短。·Python自带大量的机器学习和分析包。·广泛的社区和书籍可用于支持Python开发人员。·从预测分析到UI,几乎任何类型的应用程序都可以用Python实现。·Python程序不需要声明变量类型。因此,构建的应用程序可以运行得更快。为什么不选择Python(缺点)Python程序与其他语言(C++、C#、Java)相比运行速度较慢,因为Python中缺少像优化器支持这样的JustInTime。·Python语法空白限制给编码新手带来了一些实施困难。·Python不像R语言那样提供高级统计功能。·Python不适合低级系统和硬件交互。Python如何工作下图显示了Python如何在机器上工作。这里的关键是解释器,它负责将高级的Python语言编译成低级的机器语言以供理解。02变量——目标类型和作用域程序中可以使用的变量存储信息,比如保存用户输入、程序的局部状态等。·Python中的变量是以名字命名的。Python中的变量类型包括数字、字符串、集合、列表、元组和字典,这些都是标准的数据类型。变量的声明和赋值如下:这里先将整数值1和字符串“HelloYou”分别赋值给变量myFirstVariable。由于Python中的数据类型是动态变化的,所以这种重复赋值操作是有可能的。Python中的变量赋值操作也称为绑定(blinding)。数值类型如下所示。Python支持整数、小数和浮点数据。另外也可以支持长整型,用L作为后缀表示,比如999999999999L。字符串字符串是表示文本信息的字母序列。字符串值用引号括起来,如下所示。字符串是不可变的,一旦创建就不能修改。如下:当一个字符串变量被赋予一个新的值时,Python会创建一个新的对象来存储这个变量值。局部变量和全局变量局部变量局部变量,比如在函数中声明的变量,该变量只存在于函数中。局部变量不能从外部访问,如下所示。Python中的if-else和for/while循环模块不能创建局部变量,如下图在for/while循环中:输出为:在if-else模块中:输出为所有变量全局变量可以通过任意全局变量功能访问,它们存在于主框架中。·此外,您还可以在函数外声明一个全局变量。值得注意的是,当需要给全局变量赋新值时,必须使用“global”关键字,如下:去掉“GlobalTestMode”时只能在some_function()函数中将变量设置为False.如果你想在多个模块之间共享一个全局变量,那么你需要创建一个共享模块文件。比如configuration.py,在文件中找到你需要的变量。最后导入共享模块。查看变量类型·使用type()函数查看换脸类型,如下图。整数变量中的逗号?可以将逗号视为变量序列,如下所示。03Operate数值运算Python支持基本的加减乘除数值计算,以及底除法,如下图。此外,Python支持求幂(**),如下所示。同时Python还可以进行除法和取余运算,如下图。字符串操作字符串拼接字符串复制字符串切片字符串反转负索引如果要获取字符串的最后一个字符,需要使用负索引值,如下所示。检查索引值的正则表达式split():通过正则表达式拆分一个字符串,得到一个列表。·sub():用正则表达式替换要匹配的字符。·subn():用正则表达式替换要匹配的字符,返回替换的字符数。castingstr(x):将变量x转为字符串类型int(x):将变量x转为整型float(x):将变量x转为浮点型有序数据集合,定义一个集合变量,如下图。SetIntersection·得到两个集合的公共部分如下图。CollectionDifference·获取两个集合的差异如下图。SetUnion·获取两个集合的并集,如下所示。三元运算符·用于在一行中写条件语句,语法结构为[IfTrue]if[Expression]Else[IfFalse],如下图。04Comment单行注释多行注释05表达式可用于布尔运算,如:相等:==不等于:!=Greater:>Less:=LessorEqual:<=06Pickling将对象转换为字符串并将字符串转储到文件中的过程称为pickling,反之称为unpickling。07函数·函数是可以在代码中执行的一系列语句。如果您的代码中有重复的语句,请创建一个可重用的函数并在您的程序中使用它。·函数也可以引用其他函数。·函数消除了代码中的重复,使代码调试和问题查找更加容易。·函数使代码更易于理解和管理。·函数允许将大型应用程序拆分为更小的模块。要定义一个新函数调用一个函数来检查字符串的长度,您可以调用函数len(x),如下所示。参数可以将参数添加到函数中,使函数更通用。通过参数,可以将变量传递给方法,如下所示。可选参数为参数提供默认值以传递可选参数,如下所示。Parameters如果你想让函数接受任意数量的参数,你需要在参数名前加上*,如下所示。参数允许将可变数量的关键字参数传递给函数,也可以将字典值作为关键字参数传递。Return函数可以返回一个值,如下所示。如果一个函数需要返回多个值,最好返回一个元组(每个值以逗号分隔),如下所示。Lambda函数·它是单行表达式的匿名函数·它是内联函数·Lambda函数没有声明,但由表达式实现,如下所示。函数的语法结构是:variable=lambdaarguments:表达式Lambda函数也可以作为参数传递给其他函数。dir()和help()·dir()用于显示定义的符号·help()用于显示帮助文档08模块什么是模块·Python语言自带200多个标准模块。模块是将python程序中的相似功能分组的组件。·任何python代码文件都可以打包为模块导入。·模块允许用户在他们自己的代码解决方案中设计组件。·模块提供命名空间的概念,帮助用户共享数据和服务。·模块鼓励代码重用并减少变量名冲突。PYTHONPATH·这是python的一个环境变量,表示用来运行模块的python解释器所在的位置。PYTHONHOME是一个搜索该路径的模块。如何导入模块如果您有一个文件:MyFirstPythonFile,其中包含许多函数、变量和对象,那么您可以将这些函数导入其他类,如下所示。Python在内部将模块文件编译成二进制文件,然后运行模块的代码。如果你想导入模块中的所有对象,你可以这样做:如果模块中包含的函数或对象名为my_object,那么你可以打印出来,如下所示。值得注意的是,如果不想在加载的时候执行模块,那么需要检查是否有name=='__main__'Fromimportmodule如果你只是想访问一个对象或者模块的某个部分模块,您可以这样做:导入模块允许用户在不引用模块的情况下访问模块中的对象,如下所示。模块中的所有对象都可以通过from*导入,如下所示。值得注意的是,模块只能在第一次导入时导入。如果你想使用C模块,那么你可以使用PyImport_ImportModule。另外,如果你想在两个不同的模块中使用相同的对象定义,你可以结合使用import和from来导入模块。09包(Packages)Python中的包就是模块的目录。如果您在Python代码中提供了很多功能,这些功能被分组到模块文件中,您可以从模块创建一个包,以更好地分发和管理这些模块。包可以更好地管理和组织模块,这有助于用户解决问题并更轻松地找到模块。代码中可以引入第三方包,如pandas/scikitlearn、tensorflow等,包中可以包含大量的模块。如果代码的某些部分提供了类似的功能,则可以将模块分组到一个包中,如下所示。上图中packageroot是根目录(根文件夹),packagefolder是其根目录下的子目录,my_module是packagefolder目录下的python模块文件。此外,文件夹名称可以充当命名空间,如下所示。值得注意的是,你需要确保导入包中的每个目录都包含一个__init__.py文件。PIPPIP是python的包管理器。·可以使用PIP下载包,如下所示。10条件语句条件语句ifelse,如下图。注意条件语句中冒号和缩进的使用。还可以在else部分继续加入条件逻辑语句,形成嵌套的条件结构,如下图。11LoopWhileWhile语句提供一个条件,运行循环语句直到满足条件,循环终止,如下图所示。for循环一定次数如下图。循环遍历整个字符串的所有字符,如下所示。单行for循环语法结构为[Variable]AggregateFunction([Value]for[item]in[collection])Yielding。假设你的列表包含一万亿条数据,你需要计算列表中偶数的个数。这时候把整个列表加载到内存中并不是最好的做法,可以通过列表生成每一项。·for循环使用xrange的循环结构结合条件if,通过for循环withif在两个单词中查找字母如下所示。Break如果要终止循环,可以这样做:使用斐波那契函数的循环结构,如下所示。12递归函数调用自身的过程称为递归。让我们演示一个阶乘递归函数:创建一个输入为n的阶乘函数。如果输入n=0,那么0!=1.如果输入n!=0,则n!=n(n-1)!另外,斐波那契递归函数的过程如下:创建一个斐波那契递归函数,输入为n创建前两个变量,分别赋值0和1。如果n=0,则返回0;如果n=1,则返回1;otherwise,returns(n-1)+(n-2)值得注意的是递归结构需要有退出检查,否则函数会执行死循环。13FramesFramesandstacks对帧的堆栈调用,其中Python代码被加载到堆栈中。函数连同它们的参数和变量被加载到框架中。帧以正确的执行顺序加载到堆栈上。栈描述了函数的执行。在函数外部声明的变量存储在main中。堆栈首先执行最后一帧。如果遇到运行时错误,可以使用回溯来查找函数列表。14CollectionCollectionslistLists列表是一个序列数据结构,可以包含任何数据类型,而且这个结构是可变的。列表可以按整数索引,列表可以使用方括号创建,如下所示。使用索引值来添加、更新、删除列表中的项目,如下所示。另外,复制和切片也适用于列表(类似于字符串中的操作),列表也支持排序操作,如下图。元组有点类似于列表,因为它们是可以存储任意对象序列的数据结构。元组比列表工作得更快。元组可以是整数索引。元组是不可变的,如下所示。值得注意的是,如果一个元组中的元素包含一个列表,那么这个列表是可以修改的。类似地,当一个对象被赋值并存储在一个列表中时,那么如果对象发生变化,列表中的对象也会相应地更新。字典Dictionaries字典是编程语言中最重要的数据结构之一,它可以存储键值对(key/value)对象。字典有很多优点,可以方便地进行数据检索,如下所示。可以按如下方式创建字典。如下所示打印字典的内容。字典中的值可以是任何类型的数据,包括字符串、数字、布尔值、列表甚至字典,如下所示。值得注意的是,如果要对列表进行向量或矩阵运算,可以调用Numpy包来实现。15编译和链接·这些功能适用于用其他语言(如C或C++)编写的文件。·一旦代码写入文件,文件就可以放在Modules目录下。·在Setup.local文件中添加一行以确保加载新创建的文件非常重要。编译编译允许编译新扩展的过程没有任何错误。链接一旦新的扩展被编译,它们就会被链接起来。16IteratorsIteratorsAllowstraversingacollection所有迭代器都包含__iter__()和__next__()函数只需对列表、字典、字符串或集合执行iter(x)就可以执行示例next(iter),其中iter=iter(list)迭代器是如果集合中的项目数量非常大并且不可能一次将所有文件加载到内存中,则很有用。有一些通用的迭代器可以让开发者实现函数式编程,如下:Filter·根据条件过滤出对应的值Map·计算集合中的每一个值,即映射值,比如将文本转换成整数价值。Reduce·减少集合中的值,即得到更小的集合。与集合求和一样,它本质上是可迭代的。Zip取多个集合并返回一个新集合新集合的每一项都包含来自每个输入集合的元素Zip允许同时对多个集合进行横向操作,如下所示。17面向对象设计——类·Python允许创建自定义类型,这些用户定义的类型称为类。这些类具有自定义属性和函数。·面向对象的设计允许程序员根据自己想要的属性和功能来定制和创建对象。·一个属性也可以引用另一个对象。·Python中的类可以引用其他类。·Python支持封装——实例函数和变量。·Python支持继承如下。·类的实例称为对象。对象是可变的,一旦一个对象被创建,相应的属性也会被更新。init·init函数存在于所有类中。该函数将在需要类实例化时执行。__init__函数可以根据需要设置相应的属性,如下图。值得注意的是,self参数会包含对象的引用,类似于C#语言中的this参数。str在调用print时返回对象的字符串结果,如下所示。因此,当执行打印语句时,会执行__str__。cmp如果你想提供自定义逻辑来比较同一实例的两个对象,你可以使用__cmp__实例函数。cmp函数返回1(较大)、-1(较小)和0(相等)以指示两个对象的大小。将cmp视为其他编程语言中的Equals()方法。重载通过将更多参数作为实例来重载对象。您还可以为添加实现所需的运算符,例如+。对象的浅拷贝和深拷贝EquivalentObjects–包含相同的值SameObjects–引用相同的Objects–指向内存中的相同地址如果要复制整个对象,可以使用copy模块),As如下。这将导致浅拷贝,因为属性的引用指针将被复制。如果对象的属性之一是对象引用,那么它将简单地指向与原始对象相同的引用地址。更新源对象中的属性将导致目标对象中的属性也被更新。浅拷贝就是拷贝引用指针。在这种情况下,可以使用深拷贝,如下所示。如果MyClass包含引用MyOtherClass对象的属性,则该属性的内容将被深度复制到新创建的对象中。深拷贝将对对象进行新的引用。18面向对象设计——继承Python支持对象继承,即对象可以继承其父类的功能和属性。继承的类可以在它们的函数中包含不同的逻辑。如果一个父类ParentClass有两个子类SubClass1和SubClass2,那么你可以使用Python创建类,如下所示。上例中的两个子类都将包含my_function()函数类。继承属性鼓励代码重用和可维护性。此外,与C#语言不同,python支持多类继承。多类继承multi-Inheritance如果要调用父类函数,可以这样做:19Garbagecollection-memorymanagementPython中的所有对象都存储在一个堆空间(heapspace)中,Python解释器可以访问这个空间。Python有一个内置的垃圾收集机制。这意味着Python可以自动为程序分配和释放内存,类似于C++或C#等其他语言。垃圾回收机制主要是清理那些在程序中没有被引用/使用的对象的内存空间。由于多个对象可以共享内存引用,python使用了两种机制:引用计数:统计被引用对象的数量。如果对象的计数为0,则对象的空间被释放。循环引用:该机制着重于循环引用:当释放次数大于阈值时,只释放对象所在的内存空间。Python中新创建的对象可以通过以下方式检查:此外,还可以通过及时或基于事件的机制进行手动垃圾收集。20I/OFrom键盘使用raw_input()函数,如下所示。FilesFiles使用with/as语句打开和读取文件,与C#中读取文件的操作一致。此外,with语句可以处理关闭连接和其他清理操作。打开一个文件,如下图所示。请注意,readline()可用于读取文件中的每一行。打开这两个文件,如下所示。该文件如下所示编写。Python中的文件操作通常涉及os和shutil模块。rw表示读写模式,a表示可添加模式。SQL打开一个连接,如下所示。执行如下所示的SQL语句。WebServices查询一个空闲服务如下:序列化和反序列化JSON文件反序列化JSON如下:序列化JSON如下:21异常处理抛出异常如果想抛出异常,可以使用raise关键字,如下图.可以通过以下方式捕获异常信息:如果想捕获特定的异常,可以这样做:如果想使用try/catch/finally结构来捕获异常信息,可以这样做:值得注意的是那不管finally部分的代码是否被触发,你都可以使用finally来关闭数据库/文件连接。Try/Except/Else如果你想为异常信息赋值一个变量,你可以这样做:如果你想定义一个自定义限制,你可以使用assert关键字来实现,如下所示:值得注意的是,exceptions在python中也有继承性。另外,你也可以创建自己的异常类,如下:22多线程和GILGIL的意思是GlobalInterpreterLock。·GIL确保线程可以随时执行,并允许CPU选择需要的线程执行。·GIL可以传递当前正在执行的线程。·Python支持多线程。此外,GIL增加了代码执行的计算开销。因此,运行多线程时要小心。23DecoratorsDecorators·装饰器可以给代码增加功能,本质上是调用其他对象/函数的函数。它是一个可调用函数,所以当装饰器函数被调用时,它会返回后续需要调用的对象。·通过封装的方式封装/封装一个类/函数,然后在函数被调用时执行具体的代码。此外,还可以通过实现公共逻辑进行??记录,进行安全检查等,然后使用property来标记方法的属性。24Python中的单元测试Python中有许多单元测试和模拟库。我们以unittest为例。假设你的函数每次将输入值减1,如下图:你可以通过以下方式进行单元测试:同样,你也可以使用doctest来测试以docstrings编写的代码。25个与Python相关的热门话题为什么使用Python易于编码且易于学习面向对象的编程语言强大的分析和机器学习包更快地开发解决方案并将解决方案推向市场提供内置的内存管理功能·提供庞大的社区支持和应用程序·不需要编译,因为它本身是一种可解释的语言·动态类型,即不需要声明变量系统程序或硬件级访问。·Python不适合跨平台应用。·Python是一种动态类型的解释型语言。它比低级语言优化和运行得更慢。·基于C语言实现扩展。可以使用Spark或Hadoop创建多进程可以利用Cython、Numba和PyPy来加速Python代码或用C编写并在Python中公开。Python爱好者使用哪些IDE?·包括Spyder、Pycharm等。此外,还使用了Jupyter等各种notebook。Python中流行的框架和包有哪些?Python有很多必须掌握的包,包括PyUnit(单元测试)、PyDoc(文档)、SciPy(代数和数值计算)、Pandas(数据管理)、Sci-Kitlearn(机器学习和数据科学)、Tensorflow(人工智能)、Numpy(数组和数值计算)、BeautifulSoap(网页抓取)、Flask(微服务框架)、Pyramid(企业应用)、Django(UIMVVM)、urllib(网络爬虫)、Tkinter(GUI)、mock(模拟库),PyChecker(bugdetector),Pylint(modulecodeanalysis)等。Python包的托管方法对于Unix系统:制作一个脚本文件,模式为可执行,文件第一行必须是:Youcan使用命令行工具并执行它。也可通过PyPRI和PyPI获得。Python和R可以合并吗?R中有一个庞大而丰富的统计库,可以使用Rpy2python包或使用烧杯笔记本或Juputer中的IR内核在Python中执行R代码。有没有办法在运行Python之前捕获异常?在运行代码之前,您可以使用PyChecker和PyLink来捕获异常信息。小结本文概述了Python最重要的25个概念,足以让初学者自己编写Python包或使用已有的Python包,希望能帮助大家更好地学习Python。本文分享自华为云社区《Python从入门到精通25个关键技术点》,原作者:SimplyPersevere。点击关注,第一时间了解华为云的新鲜技术~