python_4
1.迭代器:通过iter()方法获得了list的迭代对象,然后就可以通过next()方法来访问list中的元素了,当容器中没有可访问元素时,会抛出StopIteration异常终止迭代器
data = [1,2,3,4,5]
itr = iter(data)
print(itr.__next__())
2.自定义迭代器:需要实现__iter__,__next__方法
class CustomRange:
def _init__(self, length):
self.inx = 0
self.length = length
def __iter__(self):
return self
def __next__(self):
if self.inx < self.length:
val = self.idx
self.idx += 2
return val
else:
raise StopIteration if __name__ == "__main__":
cr = CustomRange(20)
print(next(cr))
print(next(cr))
3.生成器,yield

4.生成器与迭代器的区别:
> 通过实现迭代器协议对应的__iter__()和__next__()方法,可以自定义迭代器。对于可迭代对象,for语句可以通过iter()方法获取迭代器,并且通过next方法获取容器的下一个元素
> 生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和__next__()方法
> 生成器通过生成器函数产生,生成器函数可以通过常规的def来定义,但是不用return返回,而是用yield一次返回一个结果
5.列表的api
# append,在后方插入一个元素
# insert(index, obj),插入一个元素
# pop(index),默认移除最后一个元素
# remove(obj),移除第一个匹配的元素,一次删除一个
# index(obj),找到第一个匹配到的元素的索引,没有则抛异常
# count(obj),统计匹配到的元素的次数
# extend(seq),在列表末尾追加序列中的元素
# reverse(),列表反转
# sort([Func]),排序,根据ASCII码从大到小进行排
ll = [(1,5,4),(1,2,3,6,3),(5,1,4,3)]
# 按照每个元素的长度大小进行排序
ll.sort(key=lambda x: len(x), reverse=True)
6.复制
# 引用复制
a = [1,2,3]
b = a
# 非引用复制
a = [1,2,3]
b = a[:]
# copy,deepcopy
a = [1,2,['a', 'b']]
b = a #将a的引用给b,无论a如何变化,b都将保持跟随,因为a,b指向的是同一个
c = copy.copy(a) # 浅拷贝,只拷贝父对象,不会拷贝父对象中的子对象,对子对象拷贝的仍然是子对象的引用。即:a.append(6),c不会变化,如果a[2].append("c"),c会变化。c中的子对象会跟随a中的子对象进行变化。
d = copy.deepcopy(a) # 深拷贝,与a完全没有任何瓜葛了
7.列表推导
ret = [ i for i in [1,2,3] if i >2]
8.枚举
for inx, value in enumerate([11,22,33]):
print inx, value
9.使用list实现一个栈
# 使用list实现栈
# coding:utf-8 class Stack: """
栈
"""
_arr = []
capcity = 0
size = 0
def __init__(self, capcity=100):
self.capcity = capcity def push(self, element):
if self.is_full:
raise Exception("The Stack is FULL")
self._arr.append(element)
self.size += 1 def pop(self):
if not self.is_empty:
del self._arr[self.size - 1]
self.size -= 1
else:
raise Exception("The Stack is EMPTY") def is_empty(self):
if self.size == 0:
return True
return False @property
def foo(self):
return self._foo @property
def is_full(self):
if self.size >= self.capcity:
return True
return False def get_stack(self):
if not self.is_empty:
return self._arr[self.size - 1]
raise Exception("The stack is EMPTY") def __str__(self):
msg = ["Stack: "]
if self.is_empty:
return "Stack is EMPTY!"
for arr in self._arr:
msg.append(str(arr) + " ")
return "".join(msg)
10.字典排序
d = {3:3,8:-9,1:1,0:0}
s = sorted(d.items(), key=lambda x:x[1], reverse=False)
> dict.fromkeys(seq)
> dict.fromkeys(seq, 0)
> d.get("1", "key not found") #防治抛出异常
> d.update({111:111}),如果有这个key,就更新value,没有则添加到d中
9
python_4的更多相关文章
- [Python_4] Python 面向对象(OOP)
0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...
- python_4程序设计基础
1注释 2变量和常量 3命名 4表达式 5赋值语句
- python_函数嵌套(4)
第1章 名称空间 1.1 定义 1.2 变量运行流程 1.3 临时名称空间 1.4 python三种名称空间 第2章 作用域 2.1 作用域分类 2.2 加载顺序 2.3 取值顺序 函数嵌套 2.4 ...
随机推荐
- 吴裕雄--天生自然 JAVASCRIPT开发学习:语句
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C++交换两个变量值的方法
简单地列一下交换两个变量值地几种方法. 1.通过第三方实现,这一种也是最最最常见普通的方法: void swap(int *a, int *b) { int tmp = *a; *a = *b; *b ...
- django-blog:多对多查询
简单写一下多对多查询model 不是多对多的字段我就没写上来的 class Tag(models.Model): name = models.CharField(max_length=20,verbo ...
- Bezier曲线的实现——de Casteljau算法
这学期同时上了计算机图形学和计算方法两门课,学到这部分的时候突然觉得de Casteljau递推算法特别像牛顿插值,尤其递推计算步骤很像牛顿差商表. 一开始用伯恩斯坦多项式计算Bezier曲线的时候, ...
- c#连接sql server数据库字符串
第一种方式 Data Source=数据库地址;Initial Catalog=数据库名称;User Id=数据库登录名;Password=数据库密码;[Integrated Security=SSP ...
- ubuntu下查询网络的常用命令
1.查看无线路由器(网关)的IP地址 在terminal中输入如下命令,即可查询到当前使用的路由器的IP地址(我电脑是连着一个无线网络还有一个DSL连接): route|grep -i default ...
- SDL实践:产品经理如何驱动产品安全建设
一.序言 本文从产品经理的角度出发,对产品经理的安全职责.产品驱动安全的内涵.工作内容.工作方法.所需安全资源.以及产品经理的安全工作量进行了分析.希望所有产品经理在没有心理负担的情况下,有目标.有方 ...
- day59-mysql-存储过程、函数、事务、锁、备份
存储过程.函数不是重要的内容. 三. 存储过程:类似于函数(方法),简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集合, 该语句集包括SQL语句(对数据的增删改查).条件语句和循环语句等 ...
- c#学习笔记02——接口
本身并不实现功能,但提供一种模板定义,为从它继承类或结构提供了一种定义的规范 有了接口,程序员可以把程序定义的更积极啊清晰和条理化 理解接口 接口支持多继承:抽象类不能实现多继承 接口只能定义抽象规则 ...
- mui + H5 调取摄像头和相册 实现图片上传
最近要用MUI做项目,在研究图片上传时 ,遇到了大坑 ,网上搜集各种资料,最终写了一个demo,直接看代码.参考(http://www.cnblogs.com/richerdyoung/p/66123 ...