Python简介:
Python是一种解释性语言,Python的正则表达式引擎很大程度是基于Perl的。
Jython是一个完全用Java开发的Python解释器,可以在只有Java虚拟机的环境中运行Python程序,在Jython环境中,Java和Python对象可以交互,也可以访问Java的标准类库。
Python有一点点函数化编程结构。
标准版的Python是用C编译的。
Python是大小写敏感的。
python 脚本启动方式:
#!/usr/local/bin/python # 方法一:直接指定解释器
#!/usr/bin/env python # 方法二:利用env指令
方法一:当你知道Python的完整路径时,可以直接指定解释器。
方法二:env是一个指令,可以在系统搜索路径中找到Python解释器。
在第一行用这两种方法指定后,给Python文件 +x 权限,就可以 ./test1.py
的方法直接执行。
输入输出:
print 变量名
print '%s-%d' % ('jack', 20) # %s %d %f
import sys
print >> sys.stderr, 'Fatal error!' # 输出重定向到标准错误输出
logfile = open('./log.txt', 'a') # 输出重定向到文件
print >> logfile, 'Fatal error!'
logfile.close()
print 'today', 'is a nice day', # 加逗号后不换行,但后面默认添加一个空格
input()
raw_input() # 读取一个字符串并删除串尾的换行
注释:
# 行注释
# 多行注释--其实是一个字符串
'''
多行
'''
# 文档字符串,help(foo)可查看
def foo():
"This is a function..."
pass
操作符:
+ - * / % # 加、减、乘、除、取余
** # 乘方
// # 与/注意比较,( // 取整除,返回商的整数部分)
8.1/3 # 2.6999999999999997
8.1//3 # 2.0
# 比较操作符
< <= >= > == != <>
# 逻辑操作符
and or not
数字类型:
int
long
bool
float
complex # 复数
complex(2,3) # (2+3j)
字符串、列表、元组、字典:
单引号、双引号、三引号
索引[]
切片[:]
+ 号用于字符串连接
* 号用于字符串复制
列表[]
元组() : 元组不可更改,但内容可以更改
字典{}
a = ([1,2,3],4)
a[0].append(4)
print a # ([1, 2, 3, 4], 4)
if、while、for:
if ...:
pass
elif ...:
pass
else:
pass
while ...:
pass
for i in ...:
pass
# 列表解析
a = [i+1 for i in range(5) if not i % 2] # [1, 3, 5]
错误和异常:
try:
pass
except e:
pass
raise语句
函数:
# 带默认参数的函数
def foo(age=20):
"description"
pass
模块:
# 导入模块
import sys
reload(sys)
语句与语法:
\n : 换行
\ : 继续上一行
; : 将两个语句连接在一行中
() [] {} 均可跨行书写
增量赋值:
+= -= /+ %= *= **=
<<= >>= &= ^= |=
多重赋值:(等号两边的都是元组)
x, y, z = 1, 2, 'jack'
建议改写为:(更易读)
(x, y, z) = (1, 2, 'jack')
交换变量值:
x, y = 1, 2
x, y = y, x # 直接就交换了
标志符:
合法的Python标志符:
- 第一个字符必须是字母或下划线;
- 大小写敏感;
- 只能由字母,数字,下划线构成。
关键字:
内建的名字(built-in)虽然不是关键字,但应该把它作为系统保留字,不做它用,因为Python不支持重载标志符。
Python用下划线作为变量前缀或后缀指定特殊变量。
普通变量尽量避免使用下划线作为变量名的开始。
_XXX_ : 系统定义名字
_XXX : 类中的私有变量名
基本风格指南:
import this # 查看Python之禅,
模块结构和布局(典型示例):
(1)起始行
#!/usr/bin/env python
(2)模块文档
'''This is the doc'''
module.__doc__ 可访问
(3)模块导入
import ...
(4)(全局)变量定义
(5)类定义
class.__doc__ 可访问类的文档变量
(6)函数定义
function.__doc__ 可访问函数的文档变量
(7)主程序
if __name__ == '__main__':
test()
关于__name__ 简单说两句,详情可参看我的博客:
如果模块是被导入,__name__的值是模块名字;
如果模块是被直接执行,__name__的值是'__main__'.
内存管理:
- 变量无需事先声明;
- 变量无需指定类型;
- 不用关心内存管理;
- 变量名会被回收;
- del语句能直接释放内存。
引用计数:
计数增加情况:
- 对象被创建
- 另外的别名被创建
- 作为参数传递给函数
- 成为容器对象的一个元素
计数减少情况:
- 一个本地引用离开了作用范围
- 对象的别名被显式销毁
- 对象从一个窗口对象被释放myList.remove(x)
- 窗口对象本身被销毁del myList