Python学习笔记总结(一)对象和流程语句总结

一、对象类型
1、数字
数字:不可变
2、字符串
字符串:不可原处修改【修改需要创建新的对象】,有顺序,支持求长(len),合并(+),重复(*),索引S[0],分片(S[1:3]],成员测试(in),迭代(for);
特有的查找find,替换replace,拆分split;支持list(S)将字符串分解成一个字符列表,tuple(S)将字符串分解成一个字符组成的元组,复制可用分片和copy标准库,
不支持排序sort和删除del(因为不可原处修改)
3、元组
元组:不可以原处修改,有顺序,支持求长(len),合并(+),重复(*),索引T[0],分片T[2:-1],成员测试(in),迭代(for) ,可以嵌套列表,字典,元组,
支持list(T)将元组转换列表,转换的时候生成新的对象。 复制可用分片和copy标准库;不支持排序sort和删除del(不可变)【没有方法】
注意:元组的不可变性只适用与元组本身顶层而非其内容,元组的内部的列表,字典可以像往常那样修改。
4、列表
列表:可在原处修改,有顺序,支持求长(len),合并(+),重复(*),索引L[0],分片L[0:3],成员测试(in),迭代(for),包含任何对象,可以嵌套列表,字典,元组。
可变体现在支持 增加单个对象:L.append(4),增加多个对象:L.extend([5,6,7]),在I位置插入X:L2.insert(I,X),索引赋值:L2[i]=1,分片赋值:L2[i:j]=[4,5,6]
移除数据(参数对象):L.remove(‘b‘),移除数据(参数序列) :L.pop(‘b‘),裁剪索引:del L[K],裁剪分片del L[i:j],裁剪列表:del L,
排序:L2.sort(),顺序反转:L.reverse(),通过对象查找对象索引(和索引相反的操作):L.index(‘abc‘),复制可用分片和copy标准库
支持rang(起,始,步进)创建列表
支持list(L)本身
可以将列表转换为元组:T=tuple(L)#转换的时候生成新的对象.
可以将元组转换为列表:list(T)#产生新的列表对象
不能先创建空列表再添加元素。

列表解析
>>> L=[1,2,3,4,5]
>>> L=[x+10 for x in L]
将列表中行的换行符去掉
>>> lines=[line.rstrip() for line in lines]
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘)]
扩展列表解析
重复上一个例子,但我们只需开头不为#的文字行。
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘) if line[0]!=‘#‘]
完整的语句可接纳任意数目的for分句,而每个分区都可以结合一个可选的if分句
>>> [x+y for x in ‘abc‘ for y in ‘lmn‘]
[‘al‘, ‘am‘, ‘an‘, ‘bl‘, ‘bm‘, ‘bn‘, ‘cl‘, ‘cm‘, ‘cn‘]
对一个字符串中的每个x,以及另一个字符串中的每个y,创建x+y合并的列表。收集两个字符串字符的排列组合

5、字典
字典:可在原处修改[通过键修改],无顺序,支持求长(len),索引D[‘name‘],成员测试(in),迭戈(for)(keys,values方法返回的列表支持),del D[’name‘],del D,
不支持合并,重复,分片,包含任何对象,可以嵌套列表,字典,元组。 不支持排序sort.
支持list(D),获取字典KEY的列表 复制可用.Dcopy(),copy标准库
可以创建空字典,然后再添加元素.
>>> D={}    
>>> D={‘one‘:1}
>>> D
{‘one‘: 1}
列表不能通过这样的方法来增加数据,列表只能通过append方法,列表之能通过L[1]=‘A‘这样的方法来修改已存在序列的数据。

6、对比
对象灵活性
* 列表,字典,元组可以包含任何种类的对象。
* 列表,字典,元组可以任意嵌套
* 列表,字典可以动态扩大和缩小。
有些地方的确需要拷贝,那么可以明确要求
* 没有限制条件的分片表达式(L[:])能够赋值序列
* 字典copy方法(D.copy())能够复制字典
* 有写内置函数(例如,List)能够生产拷贝(list(L))
* copy标准库模块能够生成完整拷贝

二、赋值表达式和打印
1、赋值运算
变量命名规则
语句:(下划线或者字母)+(任意数目的字母,数字或下划线)
注意:区分大小写,禁止使用保留字,前后有下划线的变量名(__X__)是系统定义的变量名,对解释器有特殊意义
变量名没有类型,但对象有

运算                    解释
diege=‘diege‘   基本形式
diege,lily=‘yum‘,‘wang‘ 元组赋值运算(位置性) 序列赋值语句
[diege,lily]=[‘yum‘,‘YUM‘] 列表赋值运算(位置性) 序列赋值语句
a,b,c=string[0],string[1],string[2] 高级赋值
((a,b),c)=(‘DI‘,‘GE‘)    可以赋值嵌套序列
a,b,c,d=‘dieg‘ #序列赋值运算,通用性 #MS不行,数量要一致。 序列赋值语句
name=uname=‘diege‘ 多目标赋值运算
diege += 43 增强赋值运算(相当于diege=diege+43)
2、表达式语句介绍
在Python中可以使用表达式作为语句 (本身只占一行)。但是,因为表达式结果不会被存储,只有当表达式工作并作为附加的效果,这样才有意义。
通常在两种情况下表达式用作语句。
*调用函数和方法
有些函数和方法会做很多工作,而不会返回值,这种函数在其他语言中有时称为流程。因为他们不会返回你可能想保留的值,所以你可以用表达式语句调用这些函数。
*在交互模式提示符下打印值
常见的python表达式语句
运算                解释
spam(eggs,ham) 函数调用
spam.ham(eggs)  方法调用
spam                在交互模式解释器内打印变量
spam < ham and ham != eggs 符合表达式
spam < ham < eggs 范围表达式
注意:虽然表达式在python中可以作为语句出现,但语句不能作为表达式。

表达式语句和在原处修改
对列表调用append,sort,reverse这类在原处修改的元算,一定是对列表在原处的修改,但这些方法在列表修改后并不会把列表返回。

3、打印
>>>print ‘diege,test‘ #把对象打印至sys.stdout,在元素之间增加一个空格,以及在末尾增加换行符。
>>> name=‘diege‘
>>> age=18
>>> print ‘my name is:%s age is:%s‘%(name,age)
my name is:diege age is:18

print x 等价于
import sys
sys.stdout.write(str(x)+‘\n‘
当print 语句以>>开始,后面再跟着输出的文件对象(或其他对象)时,该print语句可以将文字传给该对象的write方法,但是不用重设sys.stdout。因为这种重定向是暂时的。普通的print语句还是会继续打印到原始的输出流的。
>>> log=open(‘log.txt‘,‘a‘,0)
>>> x,y,z=10,11,12
>>> print >> log,x,y,z
>>> print >> 输出的文件,输入,的,内容

三、流程语句
1、while循环
while <test>:
    <statements1>
    if <test2>:break
    if <test3>:continue
    if <test4>:pass
else:
    <statements2>
break
    跳出最近所在的循环(跳出整个循环语句)
continue
    跳到最近所在循环的开头处(来到循环的首行,跳过本次循环)
pass
    什么事也不做,只是空占位语句
循环else块
    只有当循环正常离开时才会执行(也就是没有碰到break语句)
2、for循环
for循环在Python中是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素。for语句可用于字符串,列表,元组,其他内置可迭代对象以及之后我们能够通过类所创建的新对象。
for循环的首行定义了一个赋值目标(或【一些目标】),以及你想遍历的对象,首行后面是你想重复的语句块(一般都有缩进)
当ptyhon运行for循环时,会逐个将序列对象中的元素赋值给目标,然后为每个元素执行循环主体。
for <target> in <object>:
    <statements>
    if <test>:break
    if <test>:conitnue
else:
    <statements>
可以多层嵌套
三元表达式

A=Y if X else Z
只有当X为真时才会执行表达式Y,而只有当X为假时,才会执行表达式Z

3、迭代器
for循环可以用在任何【可迭代的对象】。这些迭代工具包括了for循环,列表解析,in成员关系测试,以及map内置函数等。
next()文件迭代方法,无需将文件读取。
逐行读取文本的最佳方式就是根本不要去读取,其替代的方法就是,让for循环在每轮自动调用next从而前进到下一行
>>> for line in open(‘/etc/rc.conf‘):
...     print line.upper(),
字典迭代
>>> for key in D:     
...     print key,D[key]
其他迭代环境
列表解析
[line.upper() for line in open(‘/etc/rc.conf‘)]
in成员关系
map内置函数以及其他内置工具(如sorted,sum)
map(str.upper,open(‘/etc/rc.conf‘))
>>> sorted(open(‘/etc/rc.conf‘)) #这个工具排序了,较新的内置函数,采用了迭代协议。应用于任何可迭代的对象上。
>>> sum([3,5,6,9]) #sum调用会计算任何可迭代对象内所有数字的和
23
list和tuple内置函数(从可迭代对象创建新的对象),字符串join方法(在可迭代对象内字符串之间放入子字符串),以及序列赋值语句等。
>>> list(open(‘/etc/rc.conf‘))
>>> tuple(open(‘/etc/rc.conf‘))
>>> ‘&&‘.join(open(‘/etc/rc.conf‘))
>>> a,d,c,d=open(‘/etc/rc.conf‘)
4、编写循环的技巧
遍历序列时,首选for循环,for循环包括多数计数器式的循环,for比while容易写,执行时也比较快。
Python提供了两个内置函数,在for循环内定制迭代:
* 内置range函数返回连续整数列表,可作为for中的索引。
>>> range(5,10,2)
[5, 7, 9]
>>> range(5,-5,-1)
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4]
尽量使用简单的for循环,不要用while,并且不要在for循环中使用range调用,只将其视为最后的选择,更简单的办法总是更好。
>>> for i in X:
...     print i
for x in S[::2]:print x# 步长2的
*内置 zip函数返回并行的元素元组的列表,可用于在for中遍历数个序列
并行遍历:zip 和map
>>> L1=[1,2,3,4]
>>> L2=[5,6,7,8]
>>> zip(L1,L2)
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> for (x,y) in zip(L1,L2):
...     print x,y,‘--‘,x+y
当参数长度不同时,zip会以最短序列的长度为准来截断所得到的元组:
内置map函数,用类似的方式把序列的元素配对起来,但是如果参数长度,不同则会为较短的序列用None补齐。
>>> map(None,S1,S2) 
[(‘A‘, ‘x‘), (‘B‘, ‘y‘), (‘C‘, ‘z‘), (None, ‘1‘), (None, ‘2‘), (None, ‘3‘)]
使用zip构造字典
>>> keys=[‘name‘,‘age‘,‘class‘]
>>> vals=[‘diege‘,18,2012] 
>>> dict(zip(keys,vals))
{‘age‘: 18, ‘name‘: ‘diege‘, ‘class‘: 2012}
>>> D5=dict(zip(keys,vals))
enumerate内置函数,同时产生偏移和元素
>>> S=‘diege‘
>>> for (offset,item) in enumerate(S):
...     print item,offset
...
d 0
i 1
这个方法有个next方法,每次遍历列表时,会返回一个(index,value)的元组,而我们能在for中通过元组赋值运算将其分解。
>>> E=enumerate(S)
>>> E.next()
(0, ‘d‘)
>>> E.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
5、列表解析
列表解析是写在方括号中的,因为它毕竟是一种创建新的列表的方式。
[【表达式】 for x in L【for循环行首】]
列表解析
>>> L=[1,2,3,4,5]
>>> L=[x+10 for x in L]
将列表中行的换行符去掉
>>> lines=[line.rstrip() for line in lines]
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘)]
扩展列表解析
重复上一个例子,但我们只需开头不为#的文字行。
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘) if line[0]!=‘#‘]
完整的语句可接纳任意数目的for分句,而每个分区都可以结合一个可选的if分句
>>> [x+y for x in ‘abc‘ for y in ‘lmn‘]
[‘al‘, ‘am‘, ‘an‘, ‘bl‘, ‘bm‘, ‘bn‘, ‘cl‘, ‘cm‘, ‘cn‘]
对一个字符串中的每个x,以及另一个字符串中的每个y,创建x+y合并的列表。收集两个字符串字符的排列组合

时间: 2024-10-27 06:04:03

Python学习笔记总结(一)对象和流程语句总结的相关文章

Python学习笔记之语言基础与流程控制

Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Python的特点 Python 优点 1.简单.优雅.明确 2.强大的模块第三方库 3.易移植 4.纯面向对象语言 5.可扩展性良好(c\java\c#...) Python缺点 1.代码不能加密 2.执行速度慢 Python能做什么 1.软件开发 1.游戏后台.搜索.图形界面 2.

python 学习笔记day08-面向对象编程

面向对象编程 OOP介绍 什么是OOP 编程的发展已经从简单控制流中按步的的指令序列进入到更有组织的方式中 结构化的或过程性编程可以让我们把程序组织成逻辑块,以便重复或重用 面向对象编程增强了结构化编程,实现了数据与动作的融合 数据层和逻辑层由一个可用以创建这些对象的简单抽象层来描述 常用术语 抽象/实现:抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于描绘程序结构,从而实现这种模型 封装/借口:封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函

python学习笔记8--面向对象--属性和方法详解

属性: 公有属性  (属于类,每个类一份) 普通属性  (属于对象,每个对象一份) 私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法:(按类型) 普通方法 私有方法(方法前面加两个下划线) 静态方法 类方法 属性方法 静态方法 @staticmethod静态方法,通过类直接调用,不需要创建对象,不会隐式传递self 类方法 @classmethod类方法,方法中的self是类本身,调用方法时传的值也必须是类的公有属性,就是说类方法

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

Python学习笔记_Chapter 6定制数据对象

1. 有用的BIF a. 判断字符串中是否包含子字符串 1 if s_a in s_b: b. pop() 描述:从指定的列表位置删除并返回一个数据项. 1 (sarah_name,sarah_dob)=l_rah.pop(0),l_rah.pop(0) 2 #pop(0)中0位置为list中第一个数据项 3 #第一次执行pop赋值给sarah_name c. strip() 输入的是字符串,返回的是列表 d.open 读文件时可以多种方式打开文件,取出的数据是不同的,可以是文本也可以是二进制.

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以