1python核心编程读书笔记.docx
- 文档编号:3974742
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:11
- 大小:166.59KB
1python核心编程读书笔记.docx
《1python核心编程读书笔记.docx》由会员分享,可在线阅读,更多相关《1python核心编程读书笔记.docx(11页珍藏版)》请在冰豆网上搜索。
1python核心编程读书笔记
《Python核心编程》读书笔记
最近使用python开发了彩票数据相关的项目,把《python核心编程》也仔细看了下.把相关的知识点也记了下:
主要有如下:
1.python的知识简图:
2.如何运行python
在Unix或者Linux环境下,一般默认安装了python.直接执行:
$pythonXXX.py
3.程序输出print
4.注释
(1)单行注释
单行注释以#开头,例如:
print6#输出6
(2)多行注释
(Python的注释只有针对于单行的注释(用#),这是一种变通的方法)
多行注释用三引号'''将注释括起来,例如:
'''
多行注释
多行注释
'''
(3)中文注释
在文件头上写入:
#coding=gbk
或:
#coding=utf-8
5.代码块及缩进对齐
(1)代码块通过缩进对齐表达代码逻辑,而不是使用大括号
(2)代码缩进符号有两种,制表符与空格,tab在不同的编辑器下的处理是不通的,有些是4个空格,有些是8个空格,有些可能是2个,而对空格的处理应该都是一样的,一般显示4个空格符比较好
代码缩进格式错误
IndentationError:
unexpectedindent
6.运算符
主要运算符:
+-*///%**
(1)特别地,//是浮点除法,这个值得C++程序员注意。
(2)不等于有两种表示:
<>或者=!
(3)逻辑运算符使用andornot三个关键字
(4)双星号(**)为乘方操作符,例如3**2,意思为3^2
(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。
特别地,这里的long仅受限于用户计算机的虚拟内存大小。
还有一种,10进制浮点型decimal,因为二进制表示该类型时会因为无法精确表示其小数点后面的数值而造成误差。
可以通过引入decimal模块使用该类型。
8.字符串
字符串被定义为在单引号对或者双引号对中的内容。
而三引号则可以包含自然字符串(不解释特殊字符)字符串索引从0开始,-1则表示最后一个字符。
字符串可以使用[]进行切片操作。
str=’0123456789′
printstr[0:
3]#截取第一位到第三位的字符
printstr[:
]#截取字符串的全部字符
printstr[6:
]#截取第七个字符到结尾
printstr[:
-3]#截取从头开始到倒数第三个字符之前
printstr[2]#截取第三个字符
printstr[-1]#截取倒数第一个字符
printstr[:
:
-1]#创造一个与原字符串顺序相反的字符串
printstr[-3:
-1]#截取倒数第三位与倒数第一位之前的字符
printstr[-3:
]#截取倒数第三位到结尾
printstr[:
-5:
-3]#逆序截取,具体啥意思没搞明白?
字符串查找与定位:
str.find(“0”)
字符串切分
str1=“a,b,c,d”
listStr=str1.split(“,”)
9.列表和元组
列表使用[]定义,而元组使用()定义。
列表可以修改而元组不能修改。
简单来说,元组就是只读的列表。
他们都可以通过切片[:
]来得到子集
列表类型内建函数
list.append(obj)向列表中添加一个对象obj
list.count(obj)返回一个对象obj在列表中出现的次数
list.extend(seq)把序列seq的内容添加到列表中
list.index(obj,i=0,j=len(list))返回list[k]==obj的k值,并且k的范围在i<=k list.insert(index,obj)在索引量为index的位置插入对象obj. list.pop(index=-1)删除并返回指定位置的对象,默认是最后一个对象 list.remove(obj)从列表中删除对象obj list.reverse()原地翻转列表 list.sort(func=None,key=None,reverse=False)以指定的方式排序列表中的成员,如果func和key参数指定,则按照指定的方式比较各个元素,如果reverse标志被置为True,则列表以反序排列. 元组是不可变的,要改变元组,就必须创建一个新的元组对象。 在三个标准不可变类型里面--数字,字符串和元组字符串--元组是受到影响最大的,一个数据类型是不可变的,简单来讲,就意味着一旦一个对象被定义了,它的值就不能再被更新,除非重新创建一个新的对象.对数字和字符串的影响不是很大,因为它们是标量类型,当它们代表的值改变时,这种结果是有意义的,是按照你所想要的方式进行访问的,而对于元组,事情就不是这样了。 不可变并不是坏事,比如我们把数据传给一个不了解的API时,可以确保我们的数据不会被修改。 同样地,如果我们操作从一个函数返回的元组,可以通过内建list()函数把它转换成一个列表. 10.字典 python的字典使用{}定义。 键值都可以使用任意对象。 方法名字操作 dict.clear()删除字典中所有元素 dict.copy()返回字典(浅复制)的一个副本 dict.fromkeys(seq,val=None)创建并返回一个新字典,以seq中的元素做该字典的键 val做该字典中所有键对应的初始值(如果不提供此值,则默认为None) dict.get(key,default=None)对字典dict中的键key,返回它对应的值value,如果字典中不存在此键 则返回default的值(注意,参数default的默认值为None) dict.has_key(key)如果键(key)在字典中存在,返回True,否则返回False.在Python2.2版本 引入in和notin后,此方法几乎已废弃不用了,但仍提供一个可工作的接口。 dict.items()返回一个包含字典中(键,值)对元组的列表 dict.keys()返回一个包含字典中键的列表 dict.iter()方法iteritems(),iterkeys(),itervalues()与它们对应的非迭代方法一样 不同的是它们返回一个迭代子,而不是一个列表。 dict.pop(key[,default])和方法get()相似,如果字典中key键存在,删除并返回dict[key] 如果key键不存在,且没有给出default的值,引发KeyError异常。 dict.setdefault(key,default=None)和方法set()相似,如果字典中不存在key键,由dict[key]=default为它赋值。 dict.update(dict2)将字典dict2的键-值对添加到字典dict dict.values()返回一个包含字典中所有值的列表 由于keys更多是参数而不是索引,所以dict是无序的。 在Python2.4版本以前,你只能调用字典的keys()方法获得键的列表,然后调用列表的sort()方法得到一个有序可遍历的列表。 现在特别为迭代子设计了一个名为sorted()的内建函数,它返回一个有序的迭代子。 所有不可变的类型都是可哈希的,因此它们都可以做为字典的键。 一个要说明的是问题是数字: 值相等的数字表示相同的键。 换句话来说,整型数字1和浮点数1.0的哈希值是相同的,即它们是相同的键。 同时,也有一些可变对象(很少)是可哈希的,它们可以做字典的键,但很少见。 举一个例子,一个实现了__hash__()特殊方法的类。 因为__hash__()方法返回一个整数,所以仍然是用不可变的值(做字典的键)。 11.python的浅拷贝与深拷贝 序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施: (1)完全切片操作[: ], (2)利用工厂函数,比如list(),dict()等,(3)使用copy模块的copy函数. 要得到一个完全拷贝或者说深拷贝--创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用--需要copy.deepcopy()函数. 有几点关于拷贝操作的警告。 第一,非容器类型(比如数字,字符串和其他"原子"类型的对象,像代码,类型和xrange对象等)没有深拷贝一说,浅拷贝是用完全切片操作来完成的.第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行. 12.IF语句 ifexpression: if_suite elifexpression2: elif_suite else: else_suite 13.while循环 whileexpression: while_suite 14.for循环和range() python的for更像是其他语言的foreach,它从后面的迭代元素参数中每次迭代其中的一个元素、 而为了使它更像传统的for我们可以使用rang()来生产一个数字列表。 甚至,你可以使用enumerate()函数同时迭代列表中的索引和元素。 下面是个栗子: foo='abc' fori,chinenumerate(foo): printch,'(%d)'%i 15.迭代器与iter()函数 python与stl的迭代器比较相似。 迭代器有这样的好处: 1.提供可扩展的迭代器接口。 2.对列表迭代带来了性能上的增强。 3.在字典迭代中性能提升。 4.提供更好的兼容性。 5.增强代码的简洁性。 如何迭代 根本上说,迭代器就是有一个next()方法的对象,带迭代结束时,应抛出一个StopIteration异常来告诉外部调用者迭代完成。 使用迭代器应该注意到,不能向后移动,不能回到开头,也不能复制迭代器,而且,迭代过程中改变被迭代对象会使迭代器失效(可对照stl相关内容理解) 对一个对象使用iter()函数就可以得到该对象的迭代器。 它的语法如下: iter(obj) iter(func,sentinel) 如果你传递一个参数给iter(),它会检查你传递的是不是一个序列,如果是,那么很简单: 根据索引从0一直迭代到序列结束.另一个创建迭代器的方法是使用类,我们将在第13章详细介绍,一个实现了__iter__()和next()方法的类可以作为迭代器使用. 如果是传递两个参数给iter(),它会重复地调用func,直到迭代器的下个值等于senti 16.列表解释 通过列表解释,你可以在一行里面使用一个for循环将所有值放到一个列表中: test=[x*2forxinrang(4)] test2=[x**2forxinrang(8)ifnotx%2] #test=[0,2,4,6]test2=[0,4,16,36] 17.类 类的定义与函数定义类似,()中的是继承的父类。 __init__()是类中一个特殊方法,它是类实例化第一个执行的方法,但也就仅此而已。 self变量是代表类实例自身引用的变量。 在python里面没有private关键字,完全是依赖于它的名字的。 如果一个函数、类方法或属性以两个下划线开始,它是私有的。 其他所有都是公有的。 没有protected这个概念的。 这一点要注意跟JAVA区别开来。 专有的方法: 前后都是以两个下划线的比如__init__,__call__就是专有方法 在python中有一类以两条下划线开始并且以两条下划线结束的类方法,称之为专有方法。 __init__ 构造函数,生成对象时调用 __del__ 析构函数,释放对象时调用 __add__加运算 __mul__ 乘运算 __cmp__比较运算 __repr__打印、转换 __setitem__按照索引赋值 __getitem__按照索引获取值 __len__获得长度 __call__函数调用 获取对象的信息 对象的属性 self.__name__对象的名称 __class__ 这是哪种类型的对象[抽象类的实现] __doc__ 对象知道些什么 __dict__ 对象能做些什么 __bases__ 对象的类继承自谁 __module__ 它在哪一个模块中 自省函数 id() 返回对象唯一的标识符 repr() 返回对象的标准字符串表达式 type() 返回对象的类型 dir() 返回对象的属性名称列表 vars() 返回一个字典,它包含了对象存储于其__dict__中的属性及值 hasattr() 判断一个对象是否有一个特定的属性 getattr() 取得对象的属性 setattr() 赋值给对象的属性 delattr() 从一个对象中删除属性 callable() 测试对象的可调用性 issubclass() 判断一个类是否为另一个类的子类或孙类 isinstance() 判断一个对象是否是另一个给定类的实例 super() 返回相应的父类 18.模块 模块是一种组织模式,python允许把互相关联的代码作为一个模块组织到一个独立文件中。 import导入模块。 模块导入后,可以使用点操作符访问模块内部。 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include 那么在Python中,如果要引用一些内置的函数,该怎么处理呢? 在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。 一.模块的引入 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用importmath来引入。 在调用math模块中的函数时,必须这样引用: 模块名.函数名 为什么必须加上模块名这样调用呢? 因为可能存在这样一种情况: 在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。 所以如果像上述这样引入模块的时候,调用函数必须加上模块名。 importmath #这样会报错 printsqrt (2) #这样才能正确输出结果 printmath.sqrt (2) 有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句 from模块名import函数名1,函数名2... 22.异常处理 使用try...except来处理异常。 [python]viewplaincopy 01.#-*-coding: utf-8-*- 02. 03.whileTrue: 04.try: 05.a=int(raw_input("enternumber")) 06.break 07.except: 08.print"err" 09.print"test" 19.使用函数 dir()显示对象属性。 没有参数则显示全局。 int()转换为数值 str()转换为字符串 len()对象长度 type()对象类型 20.、基本风格: (1)起始行,#! \usr\bin\envpython (2)模块文档 (3)模块导入 (4)变量定义 (5)类定义 (6)函数定义 (7)主程序 21.Python对象 (1)None--Python的Null对象 (2)对象身份的比较 (3)对象身份,笼统地可以认为是对象的内存地址。 例如,id(a)==id(b) (4)type内建函数,用来确定对象的类型,非常特别的类型也是一种对象。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 核心 编程 读书笔记