他的回复:
hw02374926+第一周笔记python标准类型:数字§字符串(str)§列表(list)§元组(tuple)§字典(dict)§集合(set)--标准类型的三种分类方式§存储模型:看对象能保存多少对象§更新模型:对象创建之后是否可以更新值§访问模型:对象的访问方式python其他类型:类型(type)§Null对象(None)§函数§模块§类§文件一、数据类型:Dictionary(字典)dict是python的内置数据类型之一,定义了键和值直接一对一的关系,用{}括起来,如果里面不写元素就是一个空字典每个字典的项的语法为key:value,当输入的key不存在会引发一个异常字典的相关操作:使用zip构造一个字典;使用已存在的key获取元素的值;使用不存在的key新增一个元素;字典元素的值可以是任意类型;字典的key是任意可hash对象;del删除字典元素;clear()方法清除字典所以元素字典的遍历:从2.2版本开始可以不用keys()方法,可以用迭代器访问 即:只要用字典名字就可以在for循环内遍历字典使用dict函数传入键值对构造,使用现有dict解包构造新的dict,使用dict的copy函数构造dict,使用dict.items返回字典键值tuple列表,dict.keys返回字典的键列表,dict.values返回dict的值的列表,dict.setdefault(key, default=None)设置对应key的默认值,dict.update(dict2)将dict2的键值都加入到dict中,dict.fromkeys(seq,val=None)创建并返回一个新字典,以seq中的元素做该字典的键,val做字典中所有键对应的初始值,dict.get(key, default=None)使用key获取字典中的值,如果不存在则返回默认值,如果没有设置默认则返回None集合集合对象是一组无序排列的可哈希的值,集合成员可以作为字典的键,空集合为set()v使用列表构造一个集合;构造一个空集合是set(),在列表增加一个列表元素,再用这个列表构造集合会失败集合的类型:可变集合(set)和不可变结合(frozenset)。可变集合可以增删元素,是不可哈希的,因此既不能作为字典的键也不能作为其他集合中的元素。不可变集合则正好相反。集合的方法: 散列拓展散列(hash)v1、键值必须是可散列的,实现__hash__, __eq__函数,且保证a==b为真,hash(a)==hash(b)也为真v2、内存开销上增加v3、键查询很快v4、键的次序取决于添加顺序v5、添加新键可能会改变已有顺序变量变量名必须是字母或者_开头。变量名的其他部分可以是字母,_或者数字。Python是大小写敏感的。其中以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数,供解释器使用。在Python中变量是不需要声明的。变量通过首次赋值产生, 当超出作用范围时自动消亡。 x=5 变量x的值为5 赋值的过程:1、在内存中创建对象1。2、创建变量名X。3、把变量和对象建立映射关系。在赋值时,是把对象的引用赋值给变量而不是值。变量可以引用任何类型的对象。变量没有类型,只有对象有类型。变量在使用前必须被赋值。可以一次赋值多个;可以多重赋值交换两个变量: a = 1 ;b = 2;a,b = b,a;此时a=2,b=1增量赋值:a = a+b;a +=b 是一样的 都会创造一个新对象可变对象:A=A+B 创建新的对象,并赋值给A;A+=B 不创建新的对象,直接在对象A上更新del删除名称,而不是对象。垃圾回收:主要算法为引用计数,当引用计数归零时,对象立即就被销毁。当删除的变量保持的是对象最后一个引用的时候,会删除对象。浅拷贝和深拷贝:通过给列表分配一个变量能创建对列表的引用,如果要创建列表的副本就要理解浅副本和深副本的概念。1 列表或其他包容器对象的浅拷贝生成对象本身的拷贝,并将其包含的对象插入到新对象中。可用分片(object[:])和copy模块的copy(obj)函数创建。2 列表或其他对象包容器对象的深拷贝生成对象本身的副本,并递归地生成所有子对象的拷贝,加入到新对象中。可用copy模块的deepcopy(obj)函数创建。比较两种拷贝副本,一般情况下表现一样。但当列表内包含另一个列表的情况下,父列表的浅副本将包含对子列表引用,而不是独立副本。其结果是,当更改其内部列表时,从父列表的两个副本中都可见PS(变量不是盒子,而是对象上的标注vID是对象的唯一标注,在整个生命周期不变v==(__eq__)比较两个对象的值,is比较对象标识,is比==执行快vPython一切皆对象)数字整型:1,234,0,-4,0x93,056长整型:123456789999999L,-8976l(Python3.6版本非法)布尔型:整型的子类,True和False对应整型的1和0浮点型:1.23,3.14e-10复数:1 + 2j,0.23-8.55 复数的内建属性§real:复数的实部§imag:复数的虚部§conjugate():返回该复数的共轭复数数字常量:v16进制常量以0x,或者0X开头,0xFFv8进制常量以0o开头,0o777v2进制常量以0b开头,0b10101010运算符python没有++和--数字常量:v16进制常量以0x,或者0X开头,0xFFv8进制常量以0o开头,0o777v2进制常量以0b开头,0b10101010常用的转换函数:§int(obj,base=10):返回字符串或数值对象的整型表示§long(obj,base=10):在3.6版本中已经没有long类型§float(obj):返回字符串或数值对象的浮点型表示§complex(str) or complex(real,imag=0.0):返回复数§bool(obj):返回布尔值常用的功能函数:§abs (num):返回num的绝对值§pow(num1,num2,mod=1):取num1的num2次方,如果提供mod参数,则计算结果再对mod进行取余运算§round(flt,ndig=0):接受一个浮点型flt并对其进行四舍五入,保存ndig位小数。注意:int():直接截取小数部分,返回整型§round(): 取与当前数值最接近的整数(四舍五入),对浮点数截取精度为0时返回整数,其他返回浮点数§math.floor(): 取与当前数值最接近的,但小于当前数值的整数进制相关的函数:§hex (num):将num转换成十六进制数并以字符串形式返回§oct(num):将num转换成八进制数并以字符串形式返回§bin(num):将num转换成二进制数并以字符串形式返回ASCII转换有关的函数:§chr(num):将ASCII值的数字转换成ASCII字符,范围只能是0~255§ord(chr):接受一个ASCII字符(长度为1的字符串),返回相应的ASCII值序列序列类型:成员有序排列,可以通过下标偏移量访问一个或多个成员序列类型的操作符:§seq[ind]: 获得下标为ind的元素§seq[ind1:ind2]: 获得下标从ind1到ind2之间的元素§seq*expr:序列重复expr次§seq1+seq2:连接序列seq1和seq2§objin seq:判断obj是否包含在seq中§objnot in seq:判断obj是否不包含在seq中切片操作:[起始:终止:步长] "in”, “not in”:是否为成员测试。常用的功能函数:§enumerate(iter):接受一个可迭代对象作为参数,返回一个enumerate对象(同时也是一个迭代器),该对象生成有iter每个元素的下标和值组成的元组§len(seq):返回seq的长度§reversed(seq):返回与seq逆序的迭代器§zip(it0,it1,...,itN):返回一个列表,其第一个元素是it0、it1...这些元素的第一个元素组成的一个元组,第二个...依此类推字符串字符串常量字符串常量表示有三种方法:1.单引号(')2.双引号(")3.三重引号(“"")Python中单引号与双引号的作用相同,在三重引号中可以表示多行字符串ØPython中没有专门的Char类型,一个字符就是长度为1的字符串ØPython的字符串是不可改变的ØPython字符串后是没有’\0’结尾的在Python中字符串是一个字符的序列,字符串下标从0开始,-1表示序列中最后一个值的下标,-2表示倒数第二值的下标以此类推操作符:“+”:用于字符串的链接操作。字符串的链接也可以使用空格“*”:重复操作符。“==”, “”, “>”, “!=”:可以进行两个字符串的比较。 (由于性能原因 不推荐使用 + 连接字符串 可以使用join函数将一个序列以指定字符串拼接起来)字符串格式化操作符r” “R”:原始字符串操作符号。当字符串前有该操作符则输出的字符串就是输入的字符串,不进行相关的转义字符的替换。正则表达式的很多字符串都会用到该操作符已避免不必要的转义字符。“u”“U”:Unicode操作符。可以把该操作符后的字符串转换为Unicode编码的字符串。§cmp(str1,str2):根据字符串的ASCII码值进行比较(python 3.6没有cmp)§max()和min():按照ASCII码值返回最大或最小的字符Unicodev符串的编码和解码s.encode(‘utf8’), s.decode()vUnicode三明治:decode->process->encodevbytes和bytearraylist列表列表是序列对象,列表用[]包括起来的,元素间使用”,”分隔,空列表[]v可包含任意的Python数据信息,如字符串、数字、列表、元组等v列表中对象可重复v列表的数据是可变的,我们可通过列表方法对其中对象进行增加、修改、删除等操作数据类型—List操作符:“+”:可以链接两个List,出于性能考虑,推荐使用extend替代。“*”:可以对List进行重复操作。“[:]”:可以对List进行切片操作。“in” “not in”:成员测试符号。“==” “” “>” “!=“:比较两个List。内置函数:cmp() len() max() min()同样可以应用于List对象。常用函数append()与extend()看似类似,其实不同。extend 接受一个参数, 这个参数总是一个list, 并且添加这个list 中的每个元素到原list 中。另一方面, append 接受一个参数, 这个参数可以是任何数据类型, 并且简单地追加到list 的尾部。tuple元组Tuple 是不可变list。一旦创建了一个tuple 就不能以任何方式改变它。Tuple是用()包括起来的。Tuple与List都是按照定义的顺序进行排序的,索引从0开始,与list 一样切片(slice) 也可以使用。注意当分割一个list 时, 会得到一个新的list ;当分割一个tuple 时, 会得到一个新的tuple。Tuple对象方法少,如count() index()Tuple也不是那么“不可变”Tuple 相对不可变性:元组保存对象的引用,元组数据结构的物理内容不变,与引用对象无关使用Tuple的好处:1.Tuple 比list 操作速度快。如果定义了一个值的常量集, 并且唯一要用它做的是不断地遍历它, 请使用tuple 代替list。2.如果对不需要修改的数据进行“写保护”, 可以使代码更安全。使用tuple 而不是list 如同拥有一个隐含的assert 语句, 说明这一数据是常量。如果必须要改变这些值, 则需要执行tuple 到list 的转换(需要使用一个特殊的函数)。3.Tuple可以作为Dictionary的Key,但是List不可以。4.Tuple可以用作字符串格式化。Tuple与List互相转换:Tuple 可以转换成list, 反之亦然。内置的tuple 函数接收一个list, 并返回一个有着相同元素的tuple。而list 函数接收一个tuple 返回一个list。从效果上看, tuple 冻结一个list, 而list 解冻一个tuple。元素tuple陷阱:圆括号也被重载作为分组操作符使用,由圆括号包含的单一元素首先被作为分组操作,而不是作为元组的分界符二、基本语句:print§del§if§while§for§break§continue§passPython语句构造和执行原则Ø语句按照顺序一条一条执行,直到出现判定和跳转指示Ø按照缩进自动识别语句和语句块的边界,顶层代码即模块中缩进最小的那些语句Ø复合语句=header:语句Ø空格和注释(#及其后的文字)都将被忽略print函数是把对象用文本化的形式输出到标准的输出流上del删除语句,可以删除列表和字典中的一项,删除列表中的一个切片,可以完整的删除一个对象。它与pop()方法不同,pop方法会返回一个值。if语句:if 。。elif。。else。。条件表达式(三元操作符)X if C else Y while expression:suite_to_repeatWhile 循环的suite_to_repeat子句会一直循环执行,直到expression值为假。for 为迭代而生:for iter_varin iterable:suite_to_repeat每次循环,iter_var迭代变量设置为可迭代对象(序列,迭代器或其他支持迭代的对象)的当前元素,提供给suite_to_repeat语句块使用。breakØ与C中break用法一样,该语句可以跳出循环,继续执行跟在“循环块”后的语句Øbreak可用在while循环和for循环中。Øbreak语句与if语句结合使用continueØ和C中传统的continue用法一样,循环中遇到该语句,程序会终止当前循环,并忽略剩余的语句,然后回到循环的顶端在while,for循环后,也可以有else语句Øelse语句缩进与while/for循环一致Ø以覆盖循环终止条件的判定Ø循环内break语句终止循环,不进入else语句块passØ如果在需要有语句块的时候不想写任何语句,可以使用pass。该语句在开发和调试很有用