Python3_02(Python基础)
Python3之路
前言:到目前发帖为止博主踢野球也有8年时间(不长不短),和中乙职业球员也踢过几次,发现业余和职业最大的区别就是基础的停,传,射,整体攻防思路最为明显,而这些最重要的恰恰是最基础的。
版权声明:本文为博主原创文章,欢迎转载,但必须标识出处,且在文章明显位置给出原文链接
Python基础
工具
- JetBrains PyCharm Community Edition 5.0.3
Linux下安装Python3
说明:一般Linux系统自带Pyhton2,卸载可能导致系统内其他软件无法使用。
1.下载:https://www.python.org/ftp/python/3.6.0/Python-3.6.0a1.tar.xz
2.解压:tar xvf Python-3.6.0a1.tar.xz
3.编译安装:进入目录 ./configure 后 make && make install
4.测试:输入Python显示Python的版本信息说明安装成功。
5.Python3源码自带pip3工具
Windows下安装Python3
只需要安装完成之后设置环境变量即可
(一)快速入门
(1)数据类型
1.Python提供了集中内置的数据类型比如整形(int)和字符型(str)。
2.Python所能表示的整数大小之受限于机器内存,而非固定数量的字节数
3.字符串可以使用对称的''或""进行封装
4.Python使用的是Unicode编码,所以字符串不局限于ASCII字符
5.Python可以使用[]([]适用于任意数据类型的数据项)来存取字符串等序列中的一项。
6.Python语法中的索引位置是从0开始
7.如果要把数据项从一种数据类型转换为另一种数据类型可以使用 datatype(item)语法
(2)对象引用
1.x=blue (x是对象引用,blue是对象):x引用的就是这个str对象
2.“=”的作用是将对象引用(x)和内存中的某对象(blue)进行绑定
3.Pthon的标识符是大小写敏感的
4.Python使用的是“动态类型”机制:只要需要,某个对象引用都可以重新引用一个不同的对象。而强类型语言(C++,JAVA)只允许与特定数据类型进行绑定。
比如:temp=33(type:int)之后执行temp=dingm(type:str);而(C++中需要先进行对象声明)int i;i=10;
5.type()函数会返回给定数据的数据类型
(3)组合数据类型
1.Python提供了关联数组与集合等组合数据类型
2.元组是固定数据类型,创建之后不可以改变。元组使用(,)的方式进行创建
2.列表是可变数据类型,创建之后可以改变,列表使用[]进行创建
3.组合数据类型也是对象,可以将某种组合数据类型嵌套在其他组合数据类型中。比如可以在列表中嵌套列表进行迭代
4.点操作符用于存取对象个某个属性
(4)逻辑操作符
1.身份操作符:is是一个二元操作符,如果左边对象引用和右边对象引用指向的是同一个对象,返回TRUE。(is只对对象引用的内存地址进行比较,同一地址存的是相同对象)
2.比较操作符(>,<,=):Python中比较操作符可以进行结链比较(0<a<10),只能在相同数据类型之间进行比较
3.逻辑运算符:and,or,not。
(5)控制流语句
1.Python中的每条语句都是顺序执行的。函数,方法调用或者控制流结构都可以使控制流转向。
2.Python中一块代码也就是一条或多条语句组成的序列,叫suite,Python某些语法中要求有一个suite,python就提供了关键字Pass(空语句适合于需要suite,但又不需要任何处理的情况)
3.if语句语法:
if boolean_expression1:
suite
elif boolean_expression2:
suite
else:
suite
Python的if语句和C++,JAVA不同的在于没有圆括号多了“:”
4.while语句语法:
while boolean_expression1:
suite
5.for...in语句语法:
for variable in iterable
suite
iterable可以是字符串,列表,元组等组合数据类型
6.基本的异常处理:
try:
try_suite
except exceptsion1 as variable
exception_suite
如果try块中的suite正常执行,则except模块将会被跳过;如果try块中的suite出现异常,则控制流会转向第一个与异常匹配的suite,同时异常suite后面的语句不再继续执行。
如果给定了as variable部分,在异常处理suite内部,variable引用的是异常对象。对异常处理模块的搜索是向外扩展的,可以延伸到调用栈内。
(6)算术操作符
1.常用的算术操作符:+,-,*,/,+=。其中减号既可以作为单值操作符(否定),也可以作为二元操作符(减法)
2.对于固定类型对象使用增强型操作符时,实际上创建一个新的对象来存储结果,之后再和对象引用进行重新绑定
3.对于可变数据类型使用增强型操作符时,会对原始列表对象进行修改,所以没有必要进行重新绑定。
4.Python语法隐藏了可变数据类型和不可变数据类型的区别,但是还要规定这两种数据类型最可能的原因是因为固定数据类型具有更高的潜力。
(7)输入输出
1.Python提供了,内置的input()函数,来接受用户的输入
2.异常处理模块集中放置在程序末端,保证流程尽可能清晰
(8)函数的创建与调用
1.函数创建的语法:
def functionName(arguments):
suite
函数也是对象,可以存储在组合数据类型中,作为参数进行调用
2.标准模块中的模块名都是小写,所以自己编写的模块使用首字母大写
(二)基本数据类型
(1)标志符和关键字
1.只要是Unicode编码的字符都可以充当引导字符
2.Python标志符不能和关键字重名
3.关于下划线(_)不能在名的开头和结尾都使用
4.数字只能充当后续字符
(2)整数
1.二进制以0b引导,八进制以0o引导,十六进制以0x引导
2.常见的数值操作符与函数
x//y :用x除以y,舍弃小数部分得到整数
x**y:计算x的y次幂
-x:对x取负数
abs(x):返回x的绝对值
divmod(x,y):二元组的方式返回x除以y所得的商和余数
pow(x,y,z):等同于(x**y)%z
round(x,n):将浮点数x四舍五入到n位小数
3.整数转换函数
bin(i):返回整数i的二进制表示的字符串
hex(i):返回i的十六进制表示的字符串
int(x):将对象x转换为整数,失败返回异常,浮点数截去小数部分
oct(i):返回i的八进制标识的字符串
int(s,base):将字符串转化为整数,失败时产生异常。如果给定了基参数,那么应该为2到36号
4.整数位逻辑运算
i|j:对整数i和j进行OR运算
i^j:对整数i和j进行XOR运算
i&j:对整数i和j进行AND运算
i<<j:将i左移j位
~i:反转i的每一位
(3)布尔型
1.有两个内置布尔型对象:true和flase
2.布尔数据类型也可以作为函数进行调用
(4)浮点类型
1.Python提供了三种浮点值:内置的float和complex类型,以及标准库中的decimal.Decimal类型,都是固定数据类型
2.Python支持混合计算模式:比如int和float类型进行运算得到float类型数据。decimal.Decimal是混合双精度的所以只能用于其他decimal.Decimal和intS进行运算
3.sys.float_info.epsilon 是机器可以区分两个浮点数的最小区别
4.指数使用p表示而不是e,e是一个有效的十六进制数字
5.math模块的函数和常量
math.acos(x):弧度x的反余弦
math.acosh(x):弧度x的反正切
math.asin(x):弧度x的反正弦
math.asinh(x):弧度x的双曲正弦
math.atan(x):弧度x的反正切
math.atan2(y,x):弧度y/x的反正切
math.atanh(x):弧度x的反双曲正切
math.ceil(x):返回大于等于x的最小整数
math.copysign(x,y):将x的符号设置为y的符号
math.cos(x):弧度x余弦
math.cosh(x):弧度x的余弦值(角度)
math.degree(r):浮点数r从弧度转化为度数
math.e:常数e
math.exp(x):返回e的x次幂
math.fabs(x):返回浮点数的绝对值
math.factorial(x):返回x!
math.floor(x):返回小于等于x的最小整数
math.fmod(x,y):x除以y的模(比%产生更好的结果)
math.frexp(x):返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围,
2**e的值在这个范围内,e取符合要求的最大整数值,然后x/(2**e),得到m的值
如果x等于0,则m和e的值都为0,m的绝对值的范围为(0.5,1)之间,不包括0.5和1
math.fsum(x):对迭代序列x中的值进行求和
math.hypoot(x,y):返回根号下x平方加上y的平方
math.isinf(x):如果x是正无穷大或负无穷大,则返回True,否则返回False
math.isnan(x):如果x不是数字True,否则返回False
math.ldexp(m,e):返回m*(2**e)的值
math.log(x,b):返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)
math.log1p(x):返回x+1的自然对数(基数为e)的值
math.modf(x):返回由x的小数部分和整数部分组成的元组
math.pi:常数π
math.pow(x,y):返回x的y次幂
math.radians(d):将d从角度转换为弧度值
math.sqrt(x):返回x的平方根
math.trync(x):返回x的整数部分
2018/8/29 17:21:05
(5)复数
1.复数的数据类型是固定的
2.复数的两个部分都是以属性名的形式存在的,分别是real和imag 。例如:z=-89.5(real)+2.125j(imag)
3.conjugate()方法用于改变虚数部分的符号。例如:z.conjugate()->-89.5-2.125j
4.math模块中的函数不能处理复数,要想使用复数,需要先导入cmath模块,cmath模块有math模块中的所有函数的复数版,也有一些复数特定的函数。
(6)十进制数
1.decimal模块可以提供固定的十进制数,精度可以自己指定,要使用Decimal模块就先导入decimal模块
2.十进制数是使用decimal.Decimal()函数创建的,该函数可以接受一个整数或者字符串作为参数,但是不以浮点数作为参数,因为浮点数不够精确
3.decimal.Decimal form-float()函数可以将float转换为十进制(返回与float数值最为接近的decimal.Decimal)
4.在使用decimal.Decimal()处理的结果作为参数给print函数调用时,打印的是字符串形式。如果只是简单的输入表达式,得到的是表象形式(生成备用的输出信息)
(7)字符串
1.str()函数也可以作为一个转换函数,第一个参数是字符串或者需要转换的数据类型,第二个参数是指定编码格式,第三个参数是指定如何处理编码错误。
2.在引号包含的字符串中使用引号,如果是相同引号,就必须进行转义
3.Python字符串转义
\N{name}:给定名称的Unicode字符
\uhhhh:给定16位十六进制的Unicode字符
\ooo:给定八进制的字符
\Uhhhhhhhh:给定32位十六进制的Unicode字符
\xhh:给定8位十六进制的Unicode字符
4.如果写一个长字符串跨越多行有3种办法:
使用三引号包含字符串
a='''asbaklsdvnk
asdnfv'''
使用()包含字符串
a=("sfhaskdfashdflhasd"
"sakdfhaksdhf")
使用+\连接字符串
a="sdkashfksadhfks"+\
"ashfklsdhflas"
5.在进行字符串比较时,Python使用的是字符串的内存字节表示,此时的排序是基于Unicode字元的。
(8)字符串分片和步距
1.分片的语法:seq[strat:end:step],step是-1时,是从最后一个字符开始,从终点到起点。最后总会返回反转字符串
(9)字符串的操作方法
s.capitalze():返回字符串的副本,首字母大写
s.center(width,char):返回字符串中间部分的子字符串,长度width,并使用空格或者chars进行填充
s.count(t,start,end):返回字符串中t字符串出现的次数
s.encode(encoding,err):返回一个bytes对象(字节序列),使用默认或指定编码格式表示该字符串,并且可以根据可选的err参数处理错误
s.endswith(x,start,end):如果s以字符串(或者s的分片)是以字符串x结尾就返回true,否则返回flase
s.expandtabs(size):返回字符串的副本,其中制表符使用8个或指定数量的空格代替
s.find(t,start,end):返回字符串t在s字符串中最左位置,找不到返回-1。使用rfind()可以发现字符串t在s字符串中最右位置
s.format(...):返回给定参数进行格式化后的字符串副本
s.index(t,start,end):回字符串t在s字符串中最左位置,找不到就产生ValueError异常。
s.isalnum():如果s不为空,并且其中每个字符都是字母数字就返回true
s.isalpha():如果s不为空,并且其中每个字符都是字母就返回true
s.isdecimal():如果s不为空,并且其中每个字符都是Unicode基数为10的数字就返回true
s.isdigit():如果s不为空,并且每个字符都是ASCII数字就返回true.[注意:"\N{digit}02"和"203"作为参数调用时都会返回TRUE,所以不能因为isdigit()返回True就判断某个字符串可以转换为整数]
s.isdentifier():如果s不为空,并且是一个有效的标志服就返回true
s.islowser():所有可小写的字符都是小写就返回true
s.isnumeric():如果s不为空,并且其中每个字符都是数值型Unicode字符,比如数字和小数,就返回true
s.printable():如果s非空,其中每个字符都是可打印的,不包括换行,就返回true
s.isspace():如果s非空,每个字符都是空白字符,就返回true
s.istitle():如果s是一个非空的首字母大写的字符串,就返回true
s.isupper():所有可大写的字符都是大写就返回true
s.jion(seq):返回序列seq中每个项连接起来之后的结果,并且以s在每两项之间分割
s.ljust(with,char):返回长度为width的字符串(使用chars进行填充),中左对齐的字符串s的一个副本
s.lower():将s中的字符变为小写
s.partituon(t):返回包含三个字符串的元组(s在t的最左边之前的部分,s在t之后的部分,如果t不在s中则返回s和两个空字符串)
s.respace(t,u,n):返回s的一个副本,其中从第一个到第n个字符串t都使用u进行替换
s.split(t,n):返回一个字符串列表,在字符串t处最多分割n次
s.splitlines(f):返回终结符处进行分割产生的行列表,剥离终结符
s.startwith(x,start,end):如果字符串s是从字符串x开始就返回true
s.strip(chars):将开始处和结尾处的空白字符进行删除(lstrip:仅删除开始处空白,rstrip:仅删除结尾处的空白)
s.swapcase():将s中大写字符变为小写,小写字符变为大写
s.title():将每个单词首字母大写,其他字母都小写
s.upper():所有字符都变为大写
s.zfill(w):返回s的副本,如果比w短,就在开始处添加0使其长度为w
(*)操作符提供了字符串复制功能。例如 s*=10 输出"=========="
str.maketrans()和str.translate()用法:
str.maketrans()用于创建字符间映射转换表,两个参数是字符串且有一样长度
str.translate()以转换表为参数,返回某个字符串根据转换表进行转换之后的副本
(10)使用str.format()对字符串进行格式化
str.format()方法会返回一个新的字符串,在新字符串中原字符串的替换字段被适当格式化后的参数替换
>>>stock=["paper","pens","note","pad"]
>>>"we have {0[1]} and {1[2]} in stock" .format(stock)
>>>we have pens and note in stock"
0是位置参数,通过字段名语法,可以引用传递给str.format()方法位置参数与关键字参数。
使用local()函数可以访问作用范围内的局部变量,会返回一个字典,键是局部变量名,值是对变量值的引用。
>>>name="dingm"
>>>sex="man"
>>>"nameis{name},sex is{sex}".format(**local())
>>>name is dingm,sex is man
将字典拆分并提供给str.format()方法时,允许字典的键作为字段名。
若果需要将多个参数传递给format()方法时,只有最后一个参数才可以使用映射拆分
三种指定符:s用于强制使用字符串形式,r用于强制使用表象形式,a表示强制使用表象形式(仅限于ASCII字符)也可以用于阻止非ASCII字符输出
>>>"{0}{0!s}{0!r}{0!a}".format(decimal.Decimal("93.4"))
>>>"93.4 93.4 Decimal('93.4) Decimal('93.4)"
(11)格式规约
"{位置参数:填充字符 对齐字符(<左对齐,^居中对齐,>右对齐) 最小宽度(使用最大宽度前加一个句点(.)) }"
>>>s="123456"
>>>"{0:-^10}".format(s)
>>>'--123456--'
在格式化规约内部也可以使用计算格式替换字段名
格式规约冒号开始,其后可以跟随一个可选字符串对(一个填充字符,一个对齐字符),之后是可选字符:+表示必须输出符号,-表示只输出复数符号,空格表示为正数输出空格;负数输出符号-,之后跟随的是最小宽度整数值
(最小宽度整数值之前可以使用字符#引导,获取某种[b表示二进制,o表示八进制,x表示小写的十六进制,X表示大写十六进制,c表示输出整数对应的Unicode字符]基数进制为前缀的输出,n代表以场所敏感的方式输出数字)
n的特殊之处在于考虑当前场景,在其产生的输出信息中使用场所特定的十进制字符与分组字符,默认场所为C(十进制符是一个句点,分组符是一个空字符串),Python会尝试自动确定用户场所(检查LANG环境变量)
>>>import locale
>>>loacle.setlocale(locale.LC_ALL,"C")
>>>x,y=(123456789,1234.56)
>>>c="{0:n} {1:n}".format(x,y)
>>>c="123456789 1234.56"
>>>loacle.setlocale(locale.LC_ALL,"en_US.UTF-8")
>>>en="{0:n}{1:n}".format(x,y)
>>>en="123,456,789 1,234.56"
>>>loacle.setlocale(locale.LC_ALL,"de_DE.UTF-8")
>>>de="{0:n}{1:n}".format(x,y)
>>>de="123.456.789 1.234,56"
注意:为整数指定最大字段是不可能的,数字可裁剪会使整数没有意义
从Python3.1开始才支持对复数进行格式化
通过把复数的实数部分和虚数部分分别作为单独的浮点数进行格式化来实现
>>>"{0.real:.3f}{0.imag:+.3f}".format(4.75917+1.2042j)
>>>'4.759+1.204j'
>>>"{0.real:.3f}{0.imag:+.3f}".format(4.75917-1.2042j)
>>>'4.759-1.204j'
>>>(4.75917+1.2042j).conjugate() #改变虚数部分的符号
>>>(4.759+1.204j)
2018/8/30 15:23:52
(三)组合数据类型
(1)元组
1.元祖是固定有序序列支持分片和步距,但不能替换删除其中的任意数据项。如果需要修改元祖,可以使用list()函数转换为列表进行修改。
2.空元组是使用()创建的,如果含有多个数据项可以使用逗号分隔进行创建
3.collections.namedtuple()用于创建自定义数据类型的元组。第一个参数是想要创建的自定义元组数据类型的名称,第二个参数是一个字符串,其中包含使用空格分割的名称,每个名称代表该元组数据类型的一项。
>>>Aircraft=collection.namedtuple("Aircraft","manufacturer model seating")
>>>seating=collection.namedtuple("seating","minimum maximum")
>>>aircraft=Aircraft("Airbus","A320-200",seating(100,200))
>>>aircraft.seating.maximum
>>>220
>>>print("{0}{1}".format(aircraft.manufacturer,aircraft.model))
>>>Airbus,A320-200
4.namedtuple._asdict()返回的是键值对的映射,其中每个键都是元祖元素的名称,值是对应的值。使用映射拆分将映射转换为str.format()方法的键值参数
(2)列表
1.空列表可以使用[]来创建,包含多个项的列表则可以使用逗号分隔来创建。列表中的所有数据实际上都是对象引用
2.列表方法
l.append(x):将数据项x追加到列表l的尾部
l.count(x):返回数据项x在列表了l中出现的次数
l.extend(m):将序列m的项追加到l的结尾处
l.index(x):返回数据项在列表中最左边出现的索引位置,否则会产生ValueError
l.insert(i,x):在索引位置int i处将数据项x插入列表l
l.pop():返回并移除list l最右边的数据项
l.pop(i):返回并移除索引位置i处的数据项
l.remove(x):从列表中移除最左边出现的x数据项,如果找不到x就产生ValueError异常
l.reverse():对列表l进行反转
l.sort(...):对列表进行排序,与内置sorted()函数一样
3.序列拆分*。用于赋值操作符左边有两个或多个变量时,其中一个使用*进行引导,数据项将会赋值给该变量,所有剩下的数据项赋值给带星号的变量
>>>first,*rest=[9,2,6,8]
>>>first,rest
>>>(9,[2,6,8])
操作符*到底是多复制操作符还是序列差分符并不会有二义性,出现在赋值操作符的左边时是序列拆分符,其他时候(做单值操作符是拆分操作符,做二进制操作符,是多复制操作符)
4.DEL语句删除,不一定是删除数据,对于某些对象引用时,del语句的作用是取消该对象引用到数据项的绑定,并删除对象引用,如果这个数据项没有被其他的对象引用进行引用,就进入垃圾回收流程。不能确定垃圾回收流程是否自动进行时,需要手动清理。一种是Try...finally语句块,另一种是使用with语句。
5.假定要x中每个奇数索引项设置为0
>>>x=[1,2,3,4,5,6,7,8,9]
>>>x[1::2]=0*len(x[1::2])
6.words.sort(key=str.lower):对words列表进行大小写不敏感排序,key用于指定一个函数,该函数用于每个数据项其返回值在排序时进行比较
(3)列表内涵
1.语法格式:[expression for item in iterable if condition] 返回一个列表,其中包含iterable中的每个数据
相同功能代码:
codes=[]
for sex in "MF"
for size in "SMXL"
if sex=="f" and size=="x":
continue
for color in "BGW":
codes.append(sex+size+color)
codes=[s+z+c for s in "MF"for z in "SMXL"for c in "BGW" if not(s=="F"and z=="X")]
如果生成的的列表非常大,那么生成每个数据项会比一次性生成整个列表要高效,这可以通过生成器实现,而不是列表内涵。
(4)集合
1.Python提供两种内置的集合类型(集合是0个或多个对象引用的具有排他性的无序组合):可变的set类型,固定的frozentset类型,进行迭代输出时是以任意顺序提供数据项
2.只有可哈希运算的对象可以添加到集合当中,所有内置数据类型都是可哈希运算(float,frozentstest,int,str,tuple),内置的可变数据类型(list,dict,set)都是不可以哈希运算的。
3.空集合必须是由set()创建的,而不能用{}进行创建,集合常用于删除重复的数据
4.集合方法
s.add(x):将数据项添加到集合s中(前提是集合中尚未包含x)
s.clear():移除集合s中的所有数据项
s.copy():返回集合的浅拷贝
s.different(t)s-t:返回一个新集合,包含在s中而不在t中的数据项
s.different_update(t)s-=t:移除每一个在t中而不在s中的数据项
s.discard(x):如果数据x在集合s中就删除该数据项
s.intersection(t)s&t:返回一个新集合,包含同时在t中也在s中的数据项
s.intersection_update(t)s&=t:集合s包含自身与集合t的交集
s.isdisjoint(t):如果s中没有和t中相同的项就返回true
s.issubset(t)s<=t:如果集合s是t集合的真子集,就返回true
s.issuperset(t)s>=t:如果集合t是集合s的真子集就返回true
s.pop():返回并移除集合s中的一个随机项,如果s时空机就产生KeyError异常
s.remove(x):从集合s中移除数据项x,如果s中不包含x就产生KeyError
s.symmetric_different(t)s^t:返回一个新集合,包含s和t中的每个数据项,但不包含同时在s和t中的数据项
s.symmetric_different(t)s^=t:使得集合s只包含自身和集合t的对称差
s.union(t)s|t:返回一个新集合,其中包含集合s所有数据项以及在t中而不在s中的数据项
s.update(t)s|=t:将集合t中,每个,s中不包含的数据项添加到集合s中
(5)字典———映射数据类型
1.dict是一种无序的数据类型,包含0个或者多个键值对,键是指向可哈希运算的对象的对象应用,值是可以指向任意类型对象的对象应用。
2.字典的键是独一无二的,如果向字典中添加一个键值项,如果与字典中存在的某个键相同,则实际效果是新值替换久值
3.添加和删除字典,d["X"]=59; del d["X"]
4.字典方法
d.clear():移除dict中所有的项
d.copy():返回dict d的浅拷贝
d.fromkeys(s,y):返回一个dict,该字典的键为序列s中的项,值为None或v
d.get(k):返回字典k关联的值,如果不在就返回None
d.get(k,v):返回字典k关联的值,如果不在就返回v
d.items():返回dict d中所有键值对的视图
d.keys():返回dict d中所有键的视图
d.pop(k):返回k在dict中关联的项,并删除键为k的项,若果k不在d中产生Keyerror异常
d.pop(k,v):返回k在dict中关联的项,并删除键为k的项,若果k不在d中就返回v
d.popitem():返回并移除d中如人意的一个键值对,如果d为空就返回KeyError
d.setdefault(k,v):返回k关联的值,若果k不在d中就插入一个键为k的新项,值为v(没给定v就返回None)
d.updeate(a):将a中不存在于字典d的键值对添加到d中,同时存在于a,d中的键,使用a中对应的值替换d中值(a可以使字典,也可以是序列或参数)
d.valuse():返回d中所有值的视图
5.视图是一个只读的序列,如果视图的字典发生变化则视图也发生变化,键视图和项视图支持一些类似类似集合的操作(交,并,对称)
6.字典常用于存放排他性的个数
7.文件的读写,文件使用内置的open函数打开,返回一个文件对象。
fin=open(filename,"w",encoding="utf-8")
8.通常不使用words[word]+=1这种语法,因为遇到新word时会产生KeyError异常(无法对不存在的对象进行递增操作)而使用words.[word]=words.get(word,0)+1
9.默认字典:
创建方式:words=collections.defdault(int)
特点:永远不会产生KeyError异常。
使用words=["xyz"],如果不存在,立即创建一个新键并且值为0
10.有序字典:有序字典可以用作无需字典的下降替代,有序字典是顺序存储的。
创建方式:d=collection.OrderdDict([('z',-4)],('e',19)) 在使用list.(d.key())会返回['z','e']
特点:如果我们改变某数据项的值时(插入新的数据项,键相同,新值替代旧值),顺序不会改变。
生成排序字典 d=collection.OrderedDict(sorted(d.items())) 只有希望对字典进行多次迭代,并且创建之后不需要进行任何插入操作时,生产成排序字典才有意义。
(6)迭代操作符和函——组合数据的迭代和复制
s+t:返回一个序列,该序列是序列s和序列t的连接
s*n:返回一个序列,该序列是序列s的n个副本的连接
x in i:如果x在序列i中返回true
all(i):如果i中的每一项都是true,就返回true
any(i):如果i中任意一项都是true,就返回true
enumerate(i,start):以迭代子为参数,并返回一个二元组(迭代次数,迭代子的下一项)
len(x):测量序列长度
max(i,key):返回序列i中的最大项,给定key函数就返回key(item)值的最大项
min(i,key):返回序列i中的最小项,给定key函数就返回key(item)值的最小项
range(start,stop,step):返回一个整数迭代子,使用一个参数时,迭代子取值范围是0到stop-1
reversed(i):反序倒转序列i中的每一项
sorted(i,key,reverse):以排序后的顺序从迭代子i返回项,key用于提供DUS(修饰,排序,反转)排序,如果reverse为true时,则排序以反序进行
sum(i,satrt):返回序列i的所有项之和
zip(il,iN):返回元祖的迭代子
(7)组合类型的复制
1.Python适用对象引用,在使用赋值操作符=时,并没有进行复制操作
2.无论通过哪一个对象引用造成的改变对另一个对象引用都是可见的
3.再进行提取数据片时,会产生一个单独的副本。所以如果需要整个序列的副本时,可以通过:words=word[:]实现,另一种方式是使用,copy()函数。但是这些复制技术都是浅拷贝(复制的都是对象引用而不是对象)。
4.深拷贝:复制之后的序列是完全独立的。
>>>import copy
>>>x=["a","b","c"]
>>>y=deepcopy(x)
2018/9/3 14:33:38
版权声明:本文为博主原创文章,欢迎转载,但必须标识出处,且在文章明显位置给出原文链接