Python学习手册(第4版).1
装饰器就是一个给对象添加额外功能的函数,其本质是函数。它的基本构造:高阶函数+函数嵌套+闭包。
装饰器 即在代码运行期间动态增加功能的方式。
3大条件:
1. 函数可作为对象,赋值给变量,也就是函数可以作为参数,也可以作为返回值。
2. 闭包,函数内部可以嵌套函数,可分为外函数和内函数。内函数可以运用外函数的临时变量,并且外函数的返回值是内函数的引用,就形成一个闭包。
3. 高阶函数,即函数式编程,条件也是第1条。
说到脚本语言和静态语言,首先要思考:如何将人类编写的程序(源代码)变成机器能执行的目标代码呢?这涉及到程序执行的两种方式:编译和解释。
编译是指将源代码一次性转换成目标代码的过程,也就是将人类编写的代码转成了计算机可执行的语言。
解释是指将源代码逐条转换成目标代码,并且同时逐条的运行。
编译相当于一次性的翻译源代码,编译之后就不再需要源代码了。而解释每次都需要源代码,再将源代码转成目标代码,机器才能执行。
现在回归主题。根据执行方式(编译、解释)的不同,编程语言分为两类,即静态语言和脚本语言。静态语言是使用编译执行的编程语言,如C语言、C++、Java语言。脚本语言则是使用解释执行的编程语言,如Python、JavaScript、PHP语言。
静态语言和脚本语言除了执行方式不同外,优势也不同。静态语言一次性生成目标代码,优化更充分,程序运行速度更快。脚本语言每一次执行都需要源代码,因此维护更灵活,也因为保留了源代码,它可以跨多个操作系统平台。
我知道这些都是从北理嵩老师课上记下来的。
脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。
脚本语言是为了缩短传统的 编写- 编译- 链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。它的命名起源于一个脚本“screenplay”,每次运行都会使 对话框逐字重复。早期的脚本语言经常被称为批量处理语言或工作控制语言。
一个脚本通常是解释执行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中.
Python标准的pickle模块提供了一个简单的对象持久化系统:它能够让程序轻松地将整个Python对象保存和恢复到文件和文件类的对象中。
NumPy系统是Python的一种开源的数字扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。
Python语言的改变必须遵循一套规范的有约束力的程序(称作PEP流程),并需要经过规范的测试系统和BDFL进行彻底检查。值得庆幸的是,正是这样使得Python相对于其他语言可以保守地持续改进。
自从PHP出来声称自己是世界上最好的编程语言后,其它语言之间的战争就已经停止了,因为只要遇到不可解决的矛盾,我们都会把矛头指向那个全民公敌PHP。从这个层面来看,PHP确实配得上这个称号。牺牲自我,造福大众。
再者,就像数学一样,其设计也具有正交性(orthogonal),也就是这门语言大多数组成部分都遵循一小组核心概念。2020-08-04
解释器是代码与机器的计算机硬件之间的软件逻辑层。
IDLE是开发 python 程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择。当安装好python以后,IDLE就自动安装好了,不需要另外去找。
.pyc”就是编译过的“.py”源代码
python的执行过程:
将.py的源代码编译成.pyc的字节码
然后又python虚拟机执行字节码文件。
如果源代码没改动,直接执行对应的字节码,提高速度。
Python虚拟机(Python Virtual Machine,简写为PVM)
PVM就是迭代运行字节码指令的一个大循环,一个接一个地完成操作。
每次编写(或修改)完 C# 代码,Unity 会花几十秒甚至很多的时间进行编译,等待编译完成的过程,我除了熟练咒骂破电脑以外,也理解了岁月静好是什么意思。
通过从网络上获得的一些第三方工具,将Python程序转为可执行程序(在Python世界中称作冻结二进制文件,Frozen Binary)是有可能的。
当在交换模式下输入两行或多行的复合语句时,提示符会发生变化。在简单的shell窗口界面中,交互提示符会在第二行及后边的行由>>>变成...;在IDLE界面中,第一行之后的行会被自动缩进。
在交互提示模式中,注意像结束for循环和if测试那样,用一个空行结束多行复合语句。必须两次按下Enter键,来结束整个多行语句,然后让其运行。
为何两次?因为你得告诉python什么时候多行语句输入结束,开始执行。否则,python以为你要输入下一行。
为了能够永久的保存程序,需要在文件中写入代码,这样的文件通常叫做模块。模块是一个包含了Python语句的简单文本文件。一旦编写完成,可以让Python解释器多次运行这样的文件中的语句,并且可以以多种方式去运行:通过系统命令行、通过点击图标、通过在IDLE用户界面中选择等方式。无论它是如何运行的,每一次当你运行模块文件时,Python都会从头至尾地执行模块文件中的每一条代码。
在系统提示模式下使用文件扩展名,但是在导入时别使用文件扩展名。
它们的第一行是特定的。脚本的第一行往往以字符# !开始(常常叫做“hash bang”),其后紧跟着机器Python解释器的路径。
硬编码Python解释器的路径
这句话指的是写Python的绝对路径/usr/local/bin/Python而不是像下文那样用/usr/bin/env去搜索
,而可以在文件特定的第一行注释中像这样写:
#!/usr/bin/env python
...script goes here...
当这样编写代码的时候,env程序可以通过系统的搜索路径的设置(例如,在绝大多数的UNIX Shell中,通过搜索PATH环境变量中的罗列出的所有目录)定位Python解释器。这种方法可以使代码更具可移植性,因为没有必要在所有的代码中的第一行都硬编码Python的安装路径。
假设在任何地方都能够使用env,无论Python安装在了系统的什么地方,你的脚本都可以照样运行:跨平台工作时所需要做的仅仅是改变PATH环境变量,而不是脚本中的第一行。当然,这是env在任何系统中都是相同的路径的前提下(有些机器,还有可能在/sbin、/bin或其他地方);如果不是的话,这种可移植性也就无从谈起了。
(multipurpose Internet mail extensions,多用途互联网邮件扩展类型),是设定某种扩展名的文件用一种应用程序来打开的方式类型