1、1python核心编程读书笔记Python核心编程读书笔记最近使用python开发了彩票数据相关的项目,把python核心编程也仔细看了下.把相关的知识点也记了下:主要有如下:1. python的知识简图:2. 如何运行python 在Unix或者Linux环境下,一般默认安装了python.直接执行:$ python XXX.py 3. 程序输出print4. 注释(1) 单行注释 单行注释以#开头,例如: print 6 #输出6 (2) 多行注释 (Python的注释只有针对于单行的注释(用#),这是一种变通的方法) 多行注释用三引号将注释括起来,例如: 多行注释 多行注释 (3) 中文
2、注释 在文件头上写入: #coding=gbk或:#coding=utf-85. 代码块及缩进对齐(1)代码块通过缩进对齐表达代码逻辑,而不是使用大括号(2) 代码缩进符号有两种,制表符与空格, tab在不同的编辑器下的处理是不通的,有些是4个空格,有些是8个空格,有些可能是2个,而对空格的处理应该都是一样的,一般显示4个空格符比较好代码缩进格式错误 IndentationError: unexpected indent6.运算符主要运算符:+ - * / / % *(1) 特别地,/是浮点除法,这个值得C+程序员注意。(2) 不等于有两种表示: 或者 = !(3) 逻辑运算符使用and or
3、 not 三个关键字(4) 双星号(*)为乘方操作符,例如3 * 2 ,意思为32(5) 冒号将代码块的头和体分开。(for/while/if/else,以及函数定义).6. 变量和赋值(1) 在Python中可以进行多元赋值,例如,x,y,z = 1,2 ,ab(2) python大小写敏感,变量名以字母数字和下划线开头。(3) python是动态语言,变量不需要声明,变量的类型和值在赋值的那一刻被初始化。(4) 赋值通过等号操作符来实现。(5) 特别地,python不支持-和+7. 数字python支持5种基本数字类型。int,long,bool,float,complex。特别地,这里的
4、long仅受限于用户计算机的虚拟内存大小。还有一种,10进制浮点型decimal,因为二进制表示该类型时会因为无法精确表示其小数点后面的数值而造成误差。可以通过引入decimal模块使用该类型。8.字符串字符串被定义为在单引号对或者双引号对中的内容。而三引号则可以包含自然字符串(不解释特殊字符)字符串索引从0开始,-1则表示最后一个字符。字符串可以使用进行切片操作。str = 0123456789print str0:3 #截取第一位到第三位的字符print str: #截取字符串的全部字符print str6: #截取第七个字符到结尾print str:-3 #截取从头开始到倒数第三个字符之
5、前print str2 #截取第三个字符print str-1 #截取倒数第一个字符print str:-1 #创造一个与原字符串顺序相反的字符串print str-3:-1 #截取倒数第三位与倒数第一位之前的字符print str-3: #截取倒数第三位到结尾print str:-5:-3 #逆序截取,具体啥意思没搞明白?字符串查找与定位:str.find(“0”)字符串切分 str1 = “a,b,c,d” listStr= str1.split(“,”)9.列表和元组列表使用定义,而元组使用()定义。列表可以修改而元组不能修改。简单来说,元组就是只读的列表。他们都可以通过切片:来得到子集
6、列表类型内建函数 list.append(obj) 向列表中添加一个对象 objlist.count(obj) 返回一个对象 obj 在列表中出现的次数 list.extend(seq) 把序列 seq 的内容添加到列表中 list.index(obj, i=0, j=len(list) 返回 listk = obj 的 k 值,并且 k 的范围在 i=kj;否则引发 ValueError 异常. list.insert(index, obj) 在索引量为 index 的位置插入对象 obj. list.pop(index=-1) 删除并返回指定位置的对象,默认是最后一个对象 list.rem
7、ove(obj) 从列表中删除对象 obj list.reverse() 原地翻转列表 list.sort(func=None,key=None, reverse=False) 以指定的方式排序列表中的成员,如果 func 和 key 参数指定,则按照指定的方式比较各个元素,如果 reverse 标志被置为True,则列表以反序排列.元组是不可变的,要改变元组,就必须创建一个新的元组对象。在三个标准不可变类型里面-数字, 字符串和元组字符串-元组是受到影响最大的,一个数据类型是不可变的,简单来讲,就意味着一旦一个对象被定义了,它的值就不能再被更新,除非重新创建一个新的对象.对数字和字符串的影响
8、不是很大,因为它们是标量类型,当它们代表的值改变时,这种结果是有意义的,是按照你所想要的方式进行访问的,而对于元组,事情就不是这样了。 不可变并不是坏事,比如我们把数据传给一个不了解的 API 时,可以确保我们的数据不会被修改。同样地,如果我们操作从一个函数返回的元组,可以通过内建 list()函数把它转换成一个列表.10.字典python的字典使用定义。键值都可以使用任意对象。 方法名字 操作 dict.clear() 删除字典中所有元素 dict.copy() 返回字典(浅复制)的一个副本 dict.fromkeys (seq,val=None)创建并返回一个新字典,以 seq 中的元素做
9、该字典的键 val 做该字典中所有键对应的初始值(如果不提供此值,则默认为 None) dict.get(key, default=None) 对字典 dict 中的键 key,返回它对应的值 value,如果字典中不存在此键 则返回 default 的值(注意,参数 default 的默认值为 None) dict.has_key(key) 如果键(key)在字典中存在, 返回 True, 否则返回 False. 在 Python2.2版本 引入 in 和 not in 后,此方法几乎已废弃不用了,但仍提供一个可工作的接口。dict.items() 返回一个包含字典中(键, 值)对元组的列表
10、 dict.keys() 返回一个包含字典中键的列表 dict.iter() 方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样 不同的是它们返回一个迭代子,而不是一个列表。 dict.pop(key , default) 和方法 get()相似,如果字典中 key 键存在,删除并返回 dictkey 如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常。 dict.setdefault(key, default=None) 和方法 set()相似,如果字典中不存在 key 键,由 dictkey=def
11、ault 为它赋值。 dict.update(dict2) 将字典 dict2 的键-值对添加到字典 dict dict.values() 返回一个包含字典中所有值的列表由于keys更多是参数而不是索引,所以dict是无序的。在 Python 2.4 版本以前, 你只能调用字典的 keys()方法获得键的列表, 然后调用列表的 sort()方法得到一个有序可遍历的列表。现在特别为迭代子设计了一个名为 sorted()的内建函数,它返回一个有序的迭代子 。所有不可变的类型都是可哈希的, 因此它们都可以做为字典的键。 一个要说明的是问题是数字:值相等的数字表示相同的键。换句话来说,整型数字 1 和
12、 浮点数 1.0 的哈希值是相同的,即它们是相同的键。 同时,也有一些可变对象(很少)是可哈希的,它们可以做字典的键,但很少见。举一个例子,一个实现了_hash_() 特殊方法的类。因为_hash_()方法返回一个整数,所以仍然是用不可变的值(做字典的键)。11.python的浅拷贝与深拷贝序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施:(1)完全切片操作:,(2)利用工厂函数,比如 list(),dict()等,(3)使用 copy 模块的 copy 函数. 要得到一个完全拷贝或者说深拷贝-创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用-需要 copy.deepco
13、py()函数.有几点关于拷贝操作的警告。 第一,非容器类型(比如数字,字符串和其他原子类型的对象,像代码,类型和 xrange 对象等)没有深拷贝一说,浅拷贝是用完全切片操作来完成的.第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行.12.IF语句if expression: if_suiteelif expression2: elif_suiteelse: else_suite13. while循环while expression: while_suite14. for循环和range()python的for更像是其他语言的foreach,它从后面的迭代元素参数中每次迭代其中的一
14、个元素、而为了使它更像传统的for我们可以使用rang()来生产一个数字列表。甚至,你可以使用enumerate()函数同时迭代列表中的索引和元素。下面是个栗子: foo=abcfor i,ch in enumerate(foo): print ch,(%d)%i15.迭代器与iter()函数python与stl的迭代器比较相似。迭代器有这样的好处:1.提供可扩展的迭代器接口。2.对列表迭代带来了性能上的增强。3.在字典迭代中性能提升。4.提供更好的兼容性。5.增强代码的简洁性。如何迭代根本上说,迭代器就是有一个next()方法的对象,带迭代结束时,应抛出一个StopIteration异常来告
15、诉外部调用者迭代完成。 使用迭代器应该注意到,不能向后移动,不能回到开头,也不能复制迭代器,而且,迭代过程中改变被迭代对象会使迭代器失效(可对照stl相关内容理解)对一个对象使用iter()函数就可以得到该对象的迭代器。它的语法如下: iter(obj) iter(func, sentinel ) 如果你传递一个参数给 iter() , 它会检查你传递的是不是一个序列, 如果是, 那么很简单: 根据索引从 0 一直迭代到序列结束. 另一个创建迭代器的方法是使用类, 我们将在第 13 章详细介绍, 一个实现了 _iter_() 和 next() 方法的类可以作为迭代器使用. 如果是传递两个参数给
16、 iter() , 它会重复地调用 func , 直到迭代器的下个值等于 senti16.列表解释通过列表解释,你可以在一行里面使用一个for循环将所有值放到一个列表中: test=x*2 for x in rang(4)test2=x*2 for x in rang(8) if not x %2#test=0,2,4,6 test2=0,4,16,3617.类类的定义与函数定义类似,()中的是继承的父类。_init_()是类中一个特殊方法,它是类实例化第一个执行的方法,但也就仅此而已。self变量是代表类实例自身引用的变量。在python里面没有private关键字,完全是依赖于它的名字的。
17、如果一个函数、类方法或属性以两个下划线开始,它是私有的。其他所有都是公有的。没有protected这个概念的。这一点要注意跟JAVA区别开来。专有的方法:前后都是以两个下划线的比如_init_,_call_就是专有方法在python中有一类以两条下划线开始并且以两条下划线结束的类方法,称之为专有方法。_init_ 构造函数,生成对象时调用_del_ 析构函数,释放对象时调用_add_ 加运算_mul_ 乘运算_cmp_ 比较运算_repr_ 打印、转换_setitem_ 按照索引赋值_getitem_ 按照索引获取值_len_ 获得长度_call_ 函数调用获取对象的信息对象的属性self._
18、name_ 对象的名称_class_ 这是哪种类型的对象抽象类的实现_doc_ 对象知道些什么_dict_ 对象能做些什么_bases_ 对象的类继承自谁_module_ 它在哪一个模块中自省函数id() 返回对象唯一的标识符repr() 返回对象的标准字符串表达式type() 返回对象的类型dir() 返回对象的属性名称列表vars() 返回一个字典,它包含了对象存储于其_dict_中的属性及值hasattr() 判断一个对象是否有一个特定的属性getattr() 取得对象的属性setattr() 赋值给对象的属性delattr() 从一个对象中删除属性callable() 测试对象的可调用
19、性issubclass() 判断一个类是否为另一个类的子类或孙类isinstance() 判断一个对象是否是另一个给定类的实例super() 返回相应的父类18.模块模块是一种组织模式,python允许把互相关联的代码作为一个模块组织到一个独立文件中。import 导入模块。模块导入后,可以使用点操作符访问模块内部。有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句#include引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module),这个和C语言中的头文
20、件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。一.模块的引入在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:模块名.函数名为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。import math#这样会报
21、错print sqrt(2)#这样才能正确输出结果print math.sqrt(2)有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句from 模块名 import 函数名1,函数名2.22.异常处理使用try.except来处理异常。python view plaincopy01.# -*- coding:utf-8 -*- 02. 03.while True: 04. try: 05. a = int(raw_input(enter number) 06. break 07. except: 08. print err 09. print test19.使用函数dir()显示对象属性。没有参数则显示全局。int()转换为数值str()转换为字符串len()对象长度type()对象类型20.、基本风格:(1)起始行,#!usrbinenv python(2)模块文档(3)模块导入(4)变量定义(5)类定义(6)函数定义(7)主程序21.Python对象 (1) None -Python的Null对象(2) 对象身份的比较(3) 对象身份,笼统地可以认为是对象的内存地址。例如,id(a) = id(b)(4) type内建函数,用来确定对象的类型,非常特别的类型也是一种对象。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1