1.1 文件类型
1. Python源文件以“py”为扩展名;
2. 字节代码,生成的文件以pyc为扩展名;
Import py_compile
py_compile.compile(‘文件名.py’)
3. 优化代码,生成的文件以pyo为扩展名;
直接进入命令行窗口,进入文件路径后,运行语句
python –O –m
py_complie文件名.py
参数“-O”必须为大写 ,表示生成优化代码;
参数“-m”表示把导入的py_compile模块作为脚本运行,编译“文件名.py”需要调用py_compile模块中的compile()方法;
此时运行文件中无需再导入py_compile模块,也无需运行模块中的compile方法。
1.2 编码规则
1.2.1命名规则
好处:便于团队的协作和交流
1) 变量名:变量包含全局变量、私有变量。通常由字母和下划线组成;
1) 包名:小写字母
2) 模块名(文件名):小写字母
3) 类名:首字母大写,其他字母小写;
4) 对象:小写字母;
5) 方法名:首字母小写,其后每个单词首字母大写;
6) 函数名:通常采用小写,并用下划线或者单词首字母大写来增加名称的可读性
7) 尽量定义有意义的,能一目了然的变量;
如:尽量定义类似sumPay,monPgy而不是sum1,sum2
1.2.2代码缩进
1.2.2.1 缩进概述
1) Python的代码缩进是一种语法,采用冒号和代码缩进来区分代码模块;
2) 相同层次,缩进需一致;
3) 若不为采用代码缩进的编码风格,会抛出IndentationError异常;
4) 冒号后面的代码需缩进编写;
5) 首层的代码书写在最左端;
6) 一般是缩进4个空格或制表键(tabulatorkey即tab键)或者同层缩进相同的空格也可,但这样不是规范的代码;
1.2.2.2 缩进报错
1. 中间语句未进行缩进时,报错
2. If语句下多条语句缩进位置不一致时,报错
3. 由于import random,是在compareNum函数外,所以此处若需调用模块random下的函数randrange(),则必须与import random缩进一致,否则报错
4. 函数内调用函数自己报错
5. 函数缩进错误?函数无需缩进?
1.2.3模块导入规范
1.2.3.1 模块概述
1) 模块是类或者函数的集合,用于实现某个功能;
1.2.3.2 导入语句
1) import模块名
a) 模块名.path 模块返回目录列表
print sys.path #查看返回的目录列表信息
b) 模块名.argv 模块存储输入参数的列表
print sys.argv #查看返回的存储参数列表信息
2) from 模块名import属性 #导入模块的部分属性,但此方法不够规范,后期会不知道打印的是什么信息
如:
from sys import path #from
...import...导入模块的部分属性
print path
1.2.4空行分隔代码
1) 函数、类的方法之间的空行分隔,表示一段新的代码的开始。
2) 类和函数之间也用一行空行分隔,突出函数入口的开始。
3) 空行不是语法,若无运行不会报错,但为了便于代码维护或重构最好加上。
4) 空行也是代码的一部分。
1.2.5注释
1) 单行和块注释均用#
2) “#”注释,只在单行语句生效
3) 采用中文注释必须在文本首行标注:#
-*-coding:utf-8-*-
如果源代码包含中文时,没有添加以上标注会报错如下:
syntaxError:
Non-ASCII character'\xe5' in file D:/myrandom.py
on line 3
encoding declared; see http://python.org/dev/peps/pep-0263/
for details
4) 程序的跨平台:#! usr/bin/python
1.2.6 语句的分隔
1) Python的分隔符号“;”可以省略,表示分隔一条语句
2) 如果一行中有多条语句,则必须用分号,最好一行为一条语句
如:x = 1 ; y = 2
否则提示语法错误:SytaxError:invalid syntax
3) 分号不是python推荐使用的语句,因为python追求简单直白
4) 支持多行一条语句。使用“\”作为换行符
如:
print \
"many rows one statement"
5) 简短语句不推荐使用换行,一般换行用于复杂的sql语句
#单条sql语句换行
#方法1,推荐使用的规范方法,每行均使用"",需要注意空格
sql =
"select id,name " \
"from
depet " \
"where
name = 'A'"
print
'sql=%s'%(sql)
#方法2,一条语句使用一次""
sql2 =
"select id,name \
from
depet \
where
name = 'A'"
print
'sql2=%s'%(sql2)
1.3 变量和常量
1.3.1变量命名
1) 变量首字母必须是字母或者字符串;
2) 变量名由数字、字母或下划线组成;
3) 变量首字母为数字时,运行源文件时会报SyntaxError:
invalid syntax错。
如:
C:\Users\Moxian>python D:/myrandom.py
File "D:/myrandom.py", line 47
1_name=1
^
SyntaxError: invalid syntax
1.3.2变量赋值
1) Python变量无需声明,赋值过程中系统会对应分配内存;
2) 一次新的赋值操作,将创建一个新的变量。
如:以下代码将打印出两次不同的值
#为变量赋值
test_value=1
print 'first tinme %s'%(test_value)
#一次新的赋值,将创建一个新的变量
test_value="hello"
print 'second tinme %s'%(test_value)
3) 变量未赋值,python将视为该变量不存在,赋值后才会被创建。
如:
#未赋值视为变量不存在
yrrr
print 'no value number %s'%(yrrr) #运行后提示NameError: name ‘yrrr’ s not defind
4) 给多个变量赋值,可同时给定字符或者数值,如果字符串没有引号则会被视为为赋值的变量
#给多个变量赋值
test_mvalue=(1,'name',3)
(value_1,value_2,value_3)=test_mvalue
print 'value_1 is %s'%(value_1)
print 'value_2 is %s'%(value_2)
print 'value_3 is %s'%(value_3)
1.3.3局部变量
1) 局部变量是只能在函数内或者代码段内使用的变量,其他文件同意不能访问此变量。
2) 超出变量范围,会提示找不到变量的错误,name ‘xxx’
is not defind
1.3.4全局变量
1) 全局变量能被不同函数、类或文件共享的变量,在函数之外定义的变量都可以称为全局变量
2) 使用保留字global引用全局变量,如果不引用,函数内有一样名称的局部变量时,则在函数内会调用局部变量
3) 如果不引用全局变量,且函数内没有同名的局部变量,则可自动调用全局变量
如:
my_value1 = 1
my_value2 = 2
def test_add():
# global my_value1
my_value1 = 3 #局部变量
return my_value1 + my_value2 #计算的是一个局部变量和全局变量的值
print test_add() #计算结果5,是一个局部变量和全局变量的值
4) 引用全局变量后,函数内另外赋值全局变量,在函数执行前,不会改变全局变量的值
5) 引用全局变量后,函数内另外赋值全局变量,在函数执行后,会改变全局变量的值
如:
#全局变量
gal_value='zhuhuan'
def test_gal():
global gal_value
gal_value = 'little huan'
return gal_value
print 'begin
test vlue'
# print
gal_value()
print
gal_value #函数内另外赋值全局变量,在函数执行前不会改变函数外全局变量的值
print test_gal()
print
gal_value #函数内另外赋值全局变量,在函数执行后会改变函数外全局变量的值
6) 调用其他文件的全局变量,调用其他文件若有日志时,会自动将文档的日志打印出来
如调用betaMo_ui.py文件的_a变量,代码如下:
importbetaMo_ui#导入文件betaMo.py
print betaMo_ui.a
#打印betaMo.py文件中的全局变量a
1.3.5常量
1) 常量指一旦初始化后就不能修改的固定值。Python没有保留字定义,可以自己定义一个类来实现变量的功能。
常量类
# -*-coding:utf-8-*-
class _const: #定义常量类来实现常量的功能
class
ConstError(TypeError):pass
def
__setattr__(self,name,value): #__setattr__为双下划线
if
self.__dict__.has_key(name): #__dict__为双下划线
raise
self.ConstError,"Can't rebind const (%s)"%name
self.__dict__[name]=value
import sys
sys.modules[__name__] = _const() #此处报错,提示_name_没有被定义,此处需要双下划线
2) 导入含此类的模块即可调用
import const #导入常量文件
const.magic=23
const.magic=25 #此处报错,因为常量为固定值