Python 25个关键技术点(附代码)
本文的目的是尽可能地用简洁的语言介绍 Python 编程语言的所有关键技术点,以帮助初学者能够使用任何 Python 库或实现自己的 Python 包。此外,本文还将重点介绍一些 Python 使用者经常查询的热门问题。下面,让我们开始吧。
01
Python 简介
什么是 Python
- 一种面向对象的高级动态可解释型脚本语言。
- Python 解释器一次读取一行代码,将其解释为低级机器语言 (如字节代码) 并执行它。
- 因此这种语言经常会引发运行错误。
为什么选择 Python (优势)
- Python 是当前最流行的语言,因为它更容易编码且具有很强的可解释性。
- Python 是一种面向对象的编程语言,也可用于编写一些功能代码。
- Python 是能够很好地弥补业务和开发人员之间差距。
- 与其他语言 (如 C#/Java) 相比,Python 程序被推向市场的时间更短。
- Python 自带大量的机器学习和分析包。
- 大量社区和书籍可用于支持 Python 开发人员。
- 从预测分析到UI,几乎所有类型的应用程序都可以用 Python 实现。
- Python 程序无需声明变量类型。 因此,所构建的应用程序能有更快的运行速度。
为什么不选择 Python (劣势)
- 与其他语言 (C++,C#,Java) 相比,Python 程序的运行更慢,这是因为Python 中缺少类似 Just In Time 优化器的支持。
- Python 语法空白约束给新手编码实现带来一些困难。
- Python 不像 R 语言那样提供高级的统计功能。
- Python 不适合进行低级系统和硬件交互。
Python 是如何工作
下图展示了 Python 在机器上的运行机制。这里的关键是解释器,它是负责将高级的 Python 语言编译成低级的机器语言,以便理解。
02
变量——目标类型及范围
- 可在程序中使用的变量存储信息,如保存用户输入,程序的本地状态等。
- Python 中的变量以名字命名。
Python 中变量类型包括数字,字符串,集合,列表,元组和字典,这些都是标准的数据类型。
声明并给变量赋值
如下所示:这里首先分别为变量 myFirstVariable 分配整型数值1,字符串“Hello You”。由于 Python 中的数据类型是动态变化的,因此这种重复赋值操作是可以实现的。
Python 中变量赋值操作又称为绑定 (blinding)。
数值型
如下所示,Python 支持整型,小数,浮点型数据。
此外,也能支持长整型,以 L 为后缀表示,如999999999999L。
字符串
字符串就是字母的序列表示文本信息。
字符串的值用引号括起来,如下所示。
字符串是不可改变的,一旦创建,就不能被修改。如下所示:
当字符串变量被赋予一个新值时,Python 将创建一个新的目标来存储这个变量值。
局部变量和全局变量
局部变量
局部变量,如在一个函数内声明一个变量,则该变量只存在于该函数中。
局部变量在外部是不能被访问的,如下所示。
Python 中 if-else 和 for/while 循环模块是不能创建局部变量,如下所示在 for/while 循环中:
输出为
在 if-else 模块中:
输出为
全部变量
- 全局变量可以通过任意一个全局函数访问,它们存在于 __main__ 框架中。
- 此外,在函数之外你也可以声明一个全局变量。值得注意得是,当需要为一个全局变量分配新值时,必须使用“global”关键字,如下所示:
当移除“Global TestMode”只能在 some_function() 函数中将变量设置为 False。如果你想在多个模块间共享一个全局变量,那么你需要创建一个共享模块文件。如 configuration.py,并在文件中找到你所需的变量。最后导入共享模块。
查看变量类型
- 通过 type() 函数来查看变脸类型,如下所示。
面向对象设计——类 Classes
- Python 允许创建自定义类型,将这些用户自定义的类型称为类。这些类具有自定义属性和功能。
- 面向对象的设计允许程序员根据自身所需的属性和功能自定义创建对象。
- 属性也可以引用另一个对象。
- Python 中的类可以引用其他类。
- Python 支持封装 -- 实例函数和变量。
- Python 支持继承,如下所示。
- 类的一个实例称为对象。对象具有可变性,一旦创建对象,相应的属性也将被更新。
__init__
- __init__ 函数在所有类中都存在。当需要进行类实例化时,该函数就将被执行。__init__ 函数可以根据需要设置相应的属性,如下所示。
值得注意的是,self 参数将包含对象的引用,这与 C# 语言中的 this 参数类似。
__str__
当调用 print 时,返回一个对象的字符串结果,如下所示。
因此,当执行 print 语句时,__str__ 将会被执行。
__cmp__
如果想要提供自定义逻辑来比较同一实例的两个对象,可以使用__cmp__ 实例函数。
__cmp__ 函数返回1 (更大), - 1 (更低) 和0 (相等),以指示两个对象的大小。
可以将 __cmp__ 想象成其他编程语言中的 Equals() 方法。
Overloading
通过将更多参数作为实例,来重载一个对象。
还可以通过为 __add__ 来实现想要的运算符,如 +。
对象的浅拷贝 (Shallow Copy) 和深拷贝 (Deep Copy)
等效对象 – 包含相同的值
相同对象 – 引用相同的对象 – 内存中指向相同的地址
如果要复制整个对象,可以使用复制模块 (copy module),如下所示。
这将导致浅拷贝,因为属性的引用指针将会被复制。
如果对象的一个属性是对象引用,那么它将简单地指向与原始对象相同的引用地址。
更新源对象中的属性将导致目标对象中的属性也会更新。
浅拷贝是复制引用指针。
这种情况下可以利用深拷贝,如下所示。
如果 MyClass 包含引用 MyOtherClass 对象的属性,则属性的内容将通过 deepcopy 复制到新创建的对象中。
深拷贝将对对象进行新的引用。
17
面向对象设计——继承
Python支持对象的继承,即对象可以继承其父类的功能和属性。
继承的类可以在其函数中包含不同的逻辑。
如果一个父类 ParentClass 有两个子类 SubClass1 和 SubClass2,那么你可以使用Python来创建类,如下所示。
此外,也可以通过及时或者基于事件机制来进行手动的垃圾收集。
20
I/O
From Keyboard
使用 raw_input() 函数,如下所示。
25
一些与 Python 有关的热门话题
为什么要使用 Python
- 编码简单,易于学习
- 面向对象编程语言
- 强大的分析功能和机器学习包
- 更快速地开发并将解决方案推向市场
- 提供内置的内存管理功能
- 提供巨大的社区支持和应用程序
- 无需编译,因为它本身是一种可解释的语言
- 动态输入,即无需声明变量
如何让 Python 运行得更快
- Python 是一种高级语言,不适合在系统程序或硬件层面访问。
- Python 不适用于跨平台的应用程序。
- Python 是一种动态类型的解释语言。与低级语言相比,它的优化和运行速度较慢。
- 实现基于 C 语言的扩展。
- 可以使用 Spark 或 Hadoop 创建多进程
- 可以利用 Cython,Numba 和 PyPy 来加速 Python 代码或用 C 语言编写它并在 Python 中公开。
Python 爱好者都是用哪些 IDEs?
- 包括 Spyder,Pycharm 等。此外,还会使用各种的 notebooks,如 Jupyter。
Python 中热门的框架和包有哪些
- Python 中必须掌握的包有很多,包括 PyUnit (单元测试), PyDoc (文档), SciPy (代数和数值计算), Pandas (数据管理), Sci-Kit learn (机器学习和数据科学), Tensorflow (人工智能), Numpy (数组和数值计算), BeautifulSoap (网页爬取), Flask (微服务框架), Pyramid (企业应用), Django (UI MVVM), urllib (网页爬取), Tkinter (GUI), mock (模拟库), PyChecker (bug 检测器), Pylint (模块代码分析) 等。
如何托管 Python 包
对于 Unix 系统:制作脚本文件,模式为可执行且文件第一行必须是:
可以使用命令行工具并执行它。也可以通过 PyPRI 和 PyPI 服务。
Python 和 R 语言能合并吗
R 语言中有着大量丰富的统计库,可以使用 Rpy2 python 包或在 Juputer 中使用 beaker 笔记本或 IR 内核,在 Python 中执行 R 代码。
在运行 Python 前有没有办法能够捕获异常?
在运行代码之前,可以使用 PyChecker 和 PyLink 来捕获异常信息。
总结
本文以简短、相关且集中的方式概述了 Python 最重要的25个概念,这些知识对初学者来说足以编写自己的 Python 包或使用现有的 Python 包,希望能帮助大家更好地学习 Python。如果时间充裕的话,尽可能多地进行一些 练习,以便更好地熟悉和理解本文中所提到的知识以及包的使用。