Python学习笔记(1)
Python即使是一门编程语言,也是解释器。
解释器是代码与机器的计算机硬件之间的软件逻辑层。
Python包安装在机器上之后,包含一些最小化的组件:一个解释器和支持的库。
一个python程序仅是一个包含python语句的文本文件。以.py命名结尾,可以被导入。
Python 2.6.6 (r266:84292, Nov 22 2013,12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] onlinux2
Type "help","copyright", "credits" or "license" for moreinformation.
>>> print 'hello world'
hello world
#表示打印引号内的字符串
>>> print 2 ** 100
1267650600228229401496703205376
#表示2的100次方
>>>
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
编辑script1.py文件
print ‘hello world’
print 2 ** 100
[root@localhost ~]# python script1.py
hello world
1267650600228229401496703205376
[root@localhost ~]#
当python运行脚本时,在代码开始运行之前,python还会执行一些步骤。确切的说,第一步是编译成所谓的字节码,之后将其转发到所谓的虚拟机中。
当程序执行的时候,python内部会先将源代码编译成所谓的字节码的形式。编译是一个简单的翻译步骤,而且字节码是源代码底层的与平台无关的表现形式。概括地说,python通过把每一条源语句分解为单一步骤来将这些源语句翻译成一组字节码指令。这些字节码可以提高执行速度:比起文本文件中的原始的源代码语句,字节码的运行速度要快。
如果python在机器上拥有写入权限,那么它将把程序的字节码保存为.pyc为扩展名的文件。如果下次再运行程序时,如果未更新源代码,则直接执行字节码;如果更新过源代码,python会自动检查源文件和字节码文件的时间戳:如果你又保存了源代码,下次程序运行时,字节码将重新被创建。
如果不具备写入权限,不创建文件,但会在内存中生成在程序结束时简单地丢弃。
Python虚拟机(PVM)
一旦程序编译成字节码,字节码被发送到PVM上来执行。
PVM就是迭代运行字节码指令的一个大循环,一个接一个完成操作。PVM是python的运行引擎,表现为python系统的一部分,并且它是完成运行脚本的组件。从技术来说,它才是所谓python解释器的最后步。
% python script1.py > saveit.txt
输出保存在saveit.txt文件中,称为流重定向。
在Python代码中,你可以只写import script1,并依靠python模块搜索的路径定位文件。
Unix可执行脚本(#!)
Unix风格的可执行脚本包含了python语句的一般文本,有两个特殊属性:
-
它们的第一行是特定的。脚本的第一行往往以字符#!开始,其后紧跟着python解释器的路径。
特殊意义:os使用它找到解释器来运行文件其他部分的程序代码。
-
它们往往具有可执行权限。脚本往往通过告诉os他们可以作为顶层程序执行,而拥有可执行的权限。 Chmod +x file.py来实现。
模块的导入和重载
每一个以.py扩展名的 python源代码文件都是一个模块。其他文件可以导入一个模块读取这个模块的内容。导入从本质上来讲,就是载入另一个文件,并能够读取该文件的内容。一个模块内容通过这样的属性能够被外部世界使用。
基于模块的方式使其变成了python程序架构的一个核心概念。更大程序往往以多个模块文件的形式出现,并且导入了其他模块文件的工具。其中的一个模块文件被设计成主文件,或叫顶层文件。
导入文件也是运行文件的一种方法
[root@localhost ~]# python
Python 2.6.6 (r266:84292, Nov 22 2013,12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] onlinux2
Type "help","copyright", "credits" or "license" for moreinformation.
>>> import script1.py
hello world
1267650600228229401496703205376
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named py
>>> import script1.py
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named py
>>>
Import脚本只有第一次运行,其他时候不再运行。
导入是一个开销大的操作,导入必须找到文件,将其编译成字节码,并且运行代码。
如果想要python在同一次会话中再次运行文件需要调用内置的reload函数。
模块的显要特性:属性
模块扮演了一个工具库的角色。模块往往就是变量名的封装,被认作是命名空间。
在一个包的变量名就是所谓的属性:属性就是绑定在特定的对象上的变量名。
一个模块的文件的变量名可以通过两个python语句读取import和from以及reload调用。
vi myfile title=”the meaning of file”
##这是一行赋值语句。 |
[root@localhost ~]# python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import myfile #运行文件;载入模块 >>> print myfile.title #使用属性名字来限定 the meaning of life >>> 这里的点号表达式代表了object.attribute的语法,可以从任何的object中取出其任意的属性。 |
>>> from myfile import title >>> print title the meaning of life >>>
|
Python程序往往由多个模块文件构成,通过import语句连接在一起。每个模块文件是一个独立的完备的变量包装,即一个命名空间。一个模块文件不能按到其他文件定义的变量名,除非它明确地导入了那个文件,所以模块文件在代码文件中起到最小化命名冲突的作用。