所读的内容来源《Python核心编程》一书,以下是自己读书一些笔记。如有侵权,还请指出,会删除该博文。
python特点:可移植性(C写的),内存管理由python解释器负责,无需编译(字节码解释器)
Windows环境:PythonWin是Python的windows解耦
Jython是Java开发的Python解释器,有Java虚拟机就能运行Jython,可访问Java包
_ :最后一个表达式的值
%s :实现字符串替换
%f:浮点数,%d
>> :重定向输出
def raw_input_test():
#user = raw_input("Enter name:") 现在input取代了raw_input
user = input("Entername:")
print("user : %s"% (user))
2.4运算符
/ /:整数除法
/ :浮点数除法
** :乘方
def operator_test(): # / 浮点数除法, /整数除法, **乘方 a = 5 / 3 b = 5 // 3 c = 2**3 print("a: %f , b: %d , c: %d" % (a, b , c))
2.6 数字
5种基本数字类型:3中是整数
int,long,bool,float,complex(复数)
长整数类似Java中BigInteger
True如果与另一个数字相加,会被当成整数值1
decimal:十进制浮点数,非内建类型,需要导入
2.7字符串
单引号,双引号,三引号(三个连续的单引号可包含特殊字符)
第一个索引是0,最后一个字符索引是-1
2.8列表和元组
[0:3],等同于[0,3)
元组=只读列表
2.9字典
dict: 实际是哈希表实现,键值对出纳处
2.10代码块缩进对齐
无大括号,使用缩进
2.11 if语句
if expr:
if_suite
2.12 while循环
while expr:
while_suite
2.13 for循环和range()内建函数
for接受可迭代对象
range函数用于数组中元素遍历: for i inrange(len(nums))
如果也要循环索引,用enumerate
def enumerate_test(): nums = range(10,15) for index , num in enumerate(nums): print("index: %d , element: %d" % (index , num) )
2.14列表解析
使用for循环将所有值放到一个列表中
例如:挑选出偶数(even)的平方
evenNums = [x ** 2 for x in range(8) if notx % 2]
2.15 文件和内建函数open(),file()
myfile = open(file_name , access_mode = ‘r’)
‘r’:读取,’w’:写入,’a’:添加
读取成功,返回文件句柄
myfile.readlines()
myfile.close()
属性:与数据有关的项目,类,模块。
2.16 错误和异常
try:
….
except:
….
2.17函数
函数用()调用,无return 返回None对象
函数通过引用调用,参数该百年会影响原始对象。
2.18类
class ClassName(base_calss[es]):
静态成员声明
方法声明
如果没有合适基类,用object。
class之后可以声明静态成员,比如
class Test(object)”
version= 0.1
__init__():类似C++构造函数
self:类实例自身的引用,等同于C++中的this
2.19模块
将有关系的代码组织到独立文件中
模块名不带.py,通过import导入
import module_name
2.20使用的函数
内建函数:在__builtins__里面,在global里面直接能用
dir([obj]):显示对象属性,其所有成员变量和方法
class Person(object): def __init__(self , name , age): self._name = name self._age = age def show(self): print(self._name) def builtFunctions_test(): nums = range(10) person = Person("chen" , 28) print(dir(person)) #dir返回对象的成员变量和方法 print(type(person)) # type返回对象的类型,比如返回是一个类
3.1语句和语法
\ 表示继续上一行
; 将两个语句连在一行中
3.2变量赋值
采用”=”是将对象引用赋值给变量
增量赋值 : x += 1,不支持x++这种
多重赋值:x = y = 1
多元赋值:将多个变量同时赋值
x,y,z = 1,2,’a string’
(x,y,z) = (1,2,3)
3.3标识符
合法标识符:第一个字符是字母或下划线
关键字:iskeyword()设置keyword模块以便查询
内建:build-in是__builtins__模块成员
_xxx:不用from module import* 倒入
__xxx__:系统定义名字
__xxx:类中的私有变量名
避免用下划线作为变量名开始
主程序调用main()函数: 检查__name__变量的值热案后执行调用
__name__指示模块加载
__name__的值为模块名字:模块被导入
__name__的值为__main__:模块会被执行
可以将测试代码放入到main()中
Pyunit是测试框架
3.5内存管理
del语句能够直接释放资源
变量定义
动态类型:对象类型和内存是运行时确定,解释型语言
内存分配:python解释器进行内存管理
引用计数:会记录使用的对象有多少引用,有引用计数器,计数为0,被回收
增加引用计数:初始时,对象被创建,计数为1;然后每次赋值,引用计数加1
比如
x=1
y=x
会有两个引用指向同一个对象。
引用计数累加在:赋值,传参,成为容器元素
1】赋值引用计数:x=1
2】作为函数参数传递也会引用计数如:test(x)
3】成为容器对象中的元素也会引用计数mylist= [123,x]
引用计数减少在:
1本地引用离开作用域,2被删除(del x),
3对象别名被重新赋值(x=1;x=2);4对象被从容器(数组)中删除(nums.remove(x));
5容器(数组)本身被删除(delnums)
删除
def del_test(): x = 1 y = 1 del y print(x)
3.5.5垃圾收集
垃圾收集器释放内存,是独立代码。
寻找引用计数为0的对象和计数大于0,但是需要被销毁的对象
解决:互相引用
3.6 相关模块和开发工具
degugger: pdb,允许设置断点,支持调试
logger: logging,调试,信息,警告,错误,,紧急
profile,hotshot:性能测试模块