|
一、Python的文件类型
Python的文件类型主要分为3种,分别是源代码、字节代码和优化代码。
1、源代码
以py为扩展名
2、字节代码
Python源文件经过编译后生成扩展名为pyc的文件,pyc是编译过的字节文件。这种文件不能使用文本编辑工具打开或修改。
下面这段脚本可以把hello.py文件编译为hello.pyc文件
import py_compile
py_compile compile("hello.py")
将此脚本保存为以py为扩展名的文件,运行后即可得到hello.pyc文件
3、优化代码
经过优化的源文件生成扩展名为pyo的文件。pyo类型的文件需要命令行工具生成。pyo文件也不能使用文本编辑工具打开或修改。
例子:
用下面的步骤把hello.py文件编译成hello.pyo文件
python -O -m py_compile hello.py
-O:表示生成优化代码;
-m:表示把导入的py_compile模块作为脚本运行。编译hello.pyo需要调用py_compile模块中的compile()方法。
二、Python的编码规则
1、命名规则
变量名的首字符必须是字母或下划线,首字母之外的字符可以由字母、数字或下划线组成,并且不能使用Python的保留字。
常见的规则:
(1)变量名、包名、模块名
变量名通常由字母和下划线组成,包名、模块名通常用小写字母。
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#变量、模块名的命名规则
#Filename:ruleModule.py
'''
#Filename:ruleModule.py用于声明模块的名称,模块名用小写字母,也可以不指定模块名,以py后缀的文件就是一个模块。模块名就是文件名。
'''
_rule = "rule infornation"#定义了一个全局变量_rule
(2)类名、对象名
类名首字母用大写,其他字母采用小写。对象名用小写字母。类的属性和方法名以对象作为前缀,对象通过操作符“.”访问属性和方法。类的私有变量、私有方法以两个下划线作为前缀。
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#变量、模块名的命名规则
class Student: #类型用大写字母
__name = "" #私有实例变量前必须有两个下划线
def __int__(self,name):
self __name = name
def getName(self):#方法名首字母用小写,其后每个单词的首字母用大写
return self __name
if __name__ == "__main__"
student = Student("Lee")#对象名用小写字母
print student.getName()
(3)函数名
函数名通常采用小写,并用下划线或单词首字母大写来增加名称的可读性,导入的函数以模块作为前缀。
例子:
randrange()的声明如下:
randrange(start,stop[,step])
start:表示生成随机数所在范围的开始数字
stop:表示生成随机数所在方位的结束数字,但不包括数字stop
step:从start开始往后的步数。生成的随机数在[start,stop - 1]的范围内,取值等于start + step
例如:
randrange(1,9,2)随机数范围在1、3、5、7之间取得。
范例:
定义一个行数compareNum(),该函数用于比较两个字的大小,并返回对应的结果。
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#函数中的命名规则
import random #导入random模块
def compareNum(num1,num2):#定义函数compareNum
if(num1 > num2):
return 1
elif(num1==num2):
return 0
else:
return -1
num1 = random.randrange(1,9)#调用random模块的randrange()返回两个随机数
num2 = random.randrange(1,9)
print ("num1 =",num1)
print ("num2 =",num2)
print (compareNum(num1,num2))
2、代码缩进和冒号
Python使用冒号和代码缩进来区分代码之间的层次。
3、模块导入的规范
模块是类或函数的集合,用于实现某个功能。在Python中,如果需要在程序中调用标准库或其他第三方库的类时,需要先用import或from...import...语句导入相关的模块。
(1)import语句
例子:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
import sys #sys模块是处理系统环境的函数的集合。
print (sys.path) #默认情况下会查找sys.path返回的目录列表,列表是Python内置的数据结构,定义了一组数据,通常用来作为参数或返回值
print (sys.argv) #sys.argv是存储输入参数的列表。默认情况下,argv自带的参数是文件名
输出结果:
---------- python2.7 ----------
['C:\Users\Administrator\Desktop', 'C:\Windows\system32\python27.zip', 'D:\Python27\DLLs', 'D:\Python27\lib', 'D:\Python27\lib\plat-win', 'D:\Python27\lib\lib-tk', 'D:\Python27', 'D:\Python27\lib\site-packages']
['Noname1.py']
输出完成 (耗时 0 秒) - 正常终止
(2)from...import...语句
首先解释一下命名空间的概念。命名空间是指标识符的上下文。相同名称的标识符可以在多条命名空间中定义,命名空间中可以定义任何标识符,并且保证这些标识符不会与任何已有的标识符发生冲突。
使用from...import...语句导入与import语句导入有所不同,区别是前者只导入模块中的一部分内容,并在当前的命名空间中创建导入对象的引用;而后者在当前程序的命名空间中创建导入模块的引用,从而可以使用“类名.属性”的方式调用。例如import sys后,可以在当前文件中调用sys.path
例子:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#不规范导入方式
from sys import path
from sys import argv
print (path)
print (argv)
输出结果:
---------- python2.7 ----------
['C:\Users\Administrator\Desktop', 'C:\Windows\system32\python27.zip', 'D:\Python27\DLLs', 'D:\Python27\lib', 'D:\Python27\lib\plat-win', 'D:\Python27\lib\lib-tk', 'D:\Python27', 'D:\Python27\lib\site-packages']
['Noname1.py']
输出完成 (耗时 0 秒) - 正常终止
4、使用空行分隔代码
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
例子:
创建一个类A,并在类A中定义funX()和funY()这两个方法
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: leexide@126.com
class A:
def funX(self):
print ("funY()")
def funY(self):
print ("funX()")
if __name__ == "__main__":
a = A()
a.funX()
a.funY()
输出结果:
---------- python2.7 ----------
funY()
funX()
输出完成 (耗时 0 秒) - 正常终止
5、正确的注释
注释的用法及其作用
注释的用法 | 作用 | 单行注释 | 说明一行语句的作用 | 块注释 | 说明一段代码的作用或者整个程序文件的功能 | 程序的跨平台 | #!/usr/bin/python | 中文注释的支持 | # -*- coding=utf-8 -*- | 调试程序 | 注释可以帮助程序员调试程序 | 6、语句的分隔Python主要通过换行来识别语句的结束。
Python支持多行写一条语句,Python使用“”作为换行符。
三、变量和常量变量是计算机内存的一块区域,变量可以存储规定范围内的值,而且值可以改变。
常量时一块只读的内存区域,常量一块只读的内存区域,常量一旦初始化就不能修改。
1、变量的命名变量名由字母、数字或下划线组成。变量名的首字符必须是字母或下划线,首字符之外的字符可以由字母、数字或下划线组成。
例如:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#正确的变量命名
var_1 = 1
print (var_1)
_var1 = 2
print (_var1)
输出结果:
---------- python2.7 ----------
1
2
输出完成 (耗时 0 秒) - 正常终止
2、变量的赋值
Python中的变量不需要声明,变量的赋值操作即是变量声明和定义的过程。每个变量在内存中创建,都包括变量的标识、名称和数据这些信息。
例如:
x = 1
如下所示:
Python中一次新的赋值,将创建一个新的变量。即使变量的名称相同,变量的标识并不相同。
例子:
演示Python的变量声明以及赋值操作。
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#一次新的赋值操作,将创建一个新的变量
x = 1
print (id(x))
x = 2
print (id(x))
输出结果:
---------- python2.7 ----------
31030120
31030096
输出完成 (耗时 0 秒) - 正常终止
说明:调用函数id,输出变量x的标识。每个变量都有一个内部标识,便于变量的维护和管理。
例子:Python支持对一些变量同时赋值的操作
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#给多个变量赋值
a = (1,2,3)
(x,y,z) = a
print ("x = ",x)
print ("y = ",y)
print ("z = ",z)
输出结果:
---------- python2.7 ----------
('x = ', 1)
('y = ', 2)
('z = ', 3)
输出完成 (耗时 0 秒) - 正常终止
3、局部变量
局部变量是只能在函数或代码段内使用的变量。函数或代码段一旦结束,局部变量的生命周期也将结束。局部变量的租用范围只在局部变量被创建的函数内有效。
例子:
如果文件1的fun()中定义了一个局部变量,则该局部变量只能被fun()访问。局部变量不能被fun2()访问,也不能被文件2访问。如图所示:
例如:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#局部变量
def fun():
local = 1
print local
local = local - 1
输出结果:
---------- python2.7 ----------
Traceback (most recent call last):
File "Noname1.py", line 9, in
local = local - 1
NameError: name 'local' is not defined
输出完成 (耗时 0 秒) - 正常终止
注意:
Python创建的变量就是一个对象,Python会管理变量的生命周期。Python对变量的回收采用的也是垃圾回收机制。
4、全局变量
全局变量是能够被不同的函数、类或文件共享的变量,在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。
例如,如果文件1中定义了一个全局变量,文件1中的函数fun()可以访问该全局变量。此外,该全局变量也能被文件1以外的文件访问。如下:
全局变量通常在文件的开始处定义。
例如:定义两个全局变量_a、_b和两个函数add()、sub(),这两个函数调用全局变量执行加法和减法计算。
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#在文件的开头定义全局变量
_a = 1
_b = 2
def add():
global _a #引用全局变量
_a = 3 #对全局变量_a重新赋值
return "_a + _b =",_a + _b
def sub():
global _b
_b = 4
return "_a - _b =",_a - _b
print (add())
print (sub())
输出结果:
---------- python2.7 ----------
('_a + _b =', 5)
('_a - _b =', -1)
输出完成 (耗时 0 秒) - 正常终止
如果不适用glocbal保留字引用全局变量,而直接对_a、_b赋值,将得到不正确的结果:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: leexide@126.com
#错误的使用全局变量
_a = 1
_b = 2
def add():
_a = 3 #对全局变量_a重新赋值
return "_a + _b =",_a + _b
def sub():
_b = 4
return "_a - _b =",_a - _b
print (add())
print (sub())
输出结果:
---------- python2.7 ----------
('_a + _b =', 5)
('_a - _b =', -3)
输出完成 (耗时 0 秒) - 正常终止
注意:
变量名相同的两个变量可能并不是同一个变量,变量的名称只是起标识的作用。变量出现的位置不同,变量的含义也不同。
可以把全局变量放在一个专门的文件中,这样便于统一管理和修改。
例如:
创建一个名为gl.py的文件
#全局变量
_a = 1
_b = 2
再创建一个调用全局变量的文件use_global.py
# -*- coding=utf-8 -*-
#Using GPL v2.7
#Author: leexide@126.com
#调用全局变量
import gl
def fun():
print (gl._a)
print (gl._b)
fun()
输出结果:
---------- python2.7 ----------
1
2
输出完成 (耗时 0 秒) - 正常终止
|
|