python学习day4
目录
一、迭代器
二、yield生成器
三、装饰器
四、递归
五、基础算法
迭代器
#1.在不使用for循环的情况下
li = [11 ,22, 33, 44]
#count = len(li)
#start = 0
#while count > start:
# print(li[start])
# start += 1
#while 使用索引进行操作,所有的其他预言,都支持while #for item in li:
# print(item)
#for循环本质
#1.创建一个特殊的东西(迭代器),获取到一个具有Next方法的对象
#2.根据这个东西去操作列表Li中的内容 #benzhi
#obj = iter(li)
#print(obj.__next__())
#迭代器 = iter(li)
#执行迭代器返回一个对象,对象是含有next方法 #使用本质,创建一个for循环
obj = iter(li)
while True:
try:
item = obj.__next__()
print(item)
except Exception:
pass # 迭代器
#
# 循环
# 1.while
# 索引,下标取数据,随意取值
# 2.for
# 一,执行迭代器,获取了一个含有next方法的对象
# 二,执行对象的next方法(一直执行)
#
# ====引出,迭代器
# 执行iter,获取一个具有next方法的对象
# -->顺序拿
迭代器
生成器
生成器
#
# python2.7
# range,xrange
#
# python3
# range=pyth2.7中的xrange
#
#
# 例:
# range(10)--->立马在内存里创建0-9
# xrange(10)--->内存里面没有数字
# for i in xrange(10):
# 第一次循环内存创建0
# i = 0
# 第二次循环内存创建1
# i = 1
# .
# .
# .
# print i
生成器
xrange,redis>keys, f句柄
生成器,内存消耗的问题就解决了
生成器最重要的东西yield
#函数
# def show():
# return 123
#
# i = show()
# print(i) #生成器
# def show():
# yield 123
#
# i = show()
# print(i) #<generator object show at 0x000001BA338658E0>
#回想,文件操作 100G文件,
#1、f=open('') =>File对象
#for i in f: ==>自动触发f对象的__iter__方法
# f = open('f1.log',"r")
# for line in f:
# print(line)
#一行一行区数据
#文件操作:
# 1、必须迭代执行生成器
# 2、yield冻结状态(记住上次执行的位置) #模拟大文件操作
def show():
yield 'line1'
yield 'line2'
yield 'line3' #本质
my_f = show()
for line in my_f:#特殊的东西
print(line)
#输出结果
'''
line1
line2
line3
'''
#总结:1.函数如果有yield,函数返回值特殊的东西(必须和for一起使用)
#2、for,函数返回的特殊东西,函数内部执行代码,如果遇到yield关键字
# 冻结当前状态,跳出函数
# 回到for,特殊东西的位置,for的一次循环完成后
# 再次进入函数,回到上次执行代码的位置,继续向下执行
#
装饰器
#装饰器 --必备
#
#1、装饰器是一个函数,装饰器其他函数(一个函数装饰另外一个函数) def login(func):
def wrapper(*arg,**kwargs):
print('before')
ret = func(*arg,**kwargs)
print('after')
return ret
return wrapper @login #方式三
def show():
return 'show' show()#-->
#show指向show函数内存地址 show()执行show函数
#方式一
new_show = login(show)
new_show()
#上下两种是相同的
#方式二
show = login(show)
show() '''
def new_show():
ret = show(*arg,**kwargs)
return ret
'''
#功能上实现了一个嵌套
#创建一个新的函数,函数内部,在执行另外一个函数
简单装饰器
递归
利用函数编写如下数列:
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
def func(arg1,arg2):
if arg1 == 0:
print arg1, arg2
arg3 = arg1 + arg2
print arg3
func(arg2, arg3) func(0,1)
冒泡算法
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = tem
第一步
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(3): # 等价于 #for m in range(len(li)-2):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(2): # 等价于 #for m in range(len(li)-3):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(1): # 等价于 #for m in range(len(li)-4):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print li
第二步
复制代码
li = [13, 22, 6, 99, 11] for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = tem
第三步
二分查找
def binary_search(data_source,find_n):
mid = int(len(data_source)/2)
if len(data_source) >= 1:
if data_source[mid] > find_n: #data in left
print("data in left of [%s]"%data_source[mid])
binary_search(data_source[:mid],find_n)
elif data_source[mid] < find_n: #data in right
print("data in right of [%s]"%data_source[mid])
binary_search(data_source[mid:],find_n)
else:
print("found dind_s,",data_source[mid])
else:
print("cannot find ") if __name__ == "__main__":
data = list(range(1,600,3))
print(data)
binary_search(data,480)
二分法查找
二维数组90度旋转
将一下数组旋转90度:
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
旋转后:
[0, 0, 0, 0]
[1, 1, 1, 1]
[2, 2, 2, 2]
[3, 3, 3, 3]
二维数组代码:
data = [[col for col in range(4)]for row in range(4)]
for row in data:
print(row)
print("-"*15)
#方法一
for r_index,row in enumerate(data):
for c_index in range(r_index,len(row)):
tmp = data[c_index][r_index]
data[c_index][r_index] = row[c_index]
data[r_index][c_index] = tmp
print("-"*15)
for r in data:
print(r)
方法一
#方法二
for i in range(len(data)):
a = [data[i][i]for row in range(4)]
print(a)
方法二
python学习day4的更多相关文章
- python学习day4软件目录结构规范
为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...
- Python学习-day4
学习装饰器,首先听haifeng老师讲解了一下准备知识. 1.函数即变量 2.高阶函数+嵌套函数==>装饰器 装饰器的作用是在,1)不改变源代码,2)不改变原函数的调用方式的前提下为函数增加新的 ...
- Python学习day4 数据类型Ⅱ(列表,元祖)
day4 知识补充&数据类型:列表,元祖 1.知识补充 1.编译型/解释型 编译型:在代码编写完成之后编译器将其变成另外一个文件教给你算计执行. 代表语言:Java,c,c++ ,c#, Go ...
- python学习day4 数据类型 if语句
1.变量的内存管理 cpython解释器垃圾回收机制 什么是垃圾,当一个值身上没有绑定变量名时,(该值的引用计数=0时)就是一个垃圾 age=18 #18的引用计数=1 x=age #18的引用计数 ...
- python学习day4之路文件的序列化和反序列化
json和pickle序列化和反序列化 json是用来实现不同程序之间的文件交互,由于不同程序之间需要进行文件信息交互,由于用python写的代码可能要与其他语言写的代码进行数据传输,json支持所有 ...
- python学习day4之路
装饰器(http://egon09.blog.51cto.com/9161406/1836763) 1.装饰器:本质是函数: 装饰器(装饰其他函数),就是为其他函数添加附加功能: 原则:1.不能修改被 ...
- python学习Day4 流程控制(if分支,while循环,for循环)
复习 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的变量,魔法变量 - ...
- python学习 day4 (3月5日)---列表
列表: 容器性数据 有序 可更改 大量数据 一.增 1.追加 append(objcet) 2.索引增加 Insert(index,元素) 3.迭代追加 extend(object) ...
- Python学习笔记,day4
Python学习第四天 一.装饰器 函数调用顺序: 其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...
随机推荐
- MVC中配置OutputCache的VaryByParam参数无效的问题
在项目使用OutputCacheAttribute是遇到了问题,当我想在配置文件web.config中配置OutputCache的VaryByParam时竟然不起作用,下面是相关代码: 文件FaceC ...
- C# 计划任务
计划任务 : 个人理解, 就是后台控制程序要求在一定的时间执行相应的任务. 直接上代码: 之前,因为工作需要. 要求每天在凌晨2:00,执行要做的数据 1.1 声明一个接口 Ijob 方法: 执行 ...
- 自制简单表单验证relative与absolute定位
html结构,用到了label与span <label class="relative"><input type="text" name=&q ...
- JSON数据解析——jsoncpp的使用
版权所有,转载请注明:http://blog.sina.com.cn/u/1978765352 由于工作中需要用到JSON数据,所以解析JSON数据就成了一个非常重要的工作内容. 其实用C++解析数据 ...
- UESTC_温泉旅店 CDOJ 878
天空飘下一朵一朵的雪花,这是一片纯白的世界. 在天空之下的温泉旅店里,雪菜已醉倒在一旁,冬马与春希看了看说着梦话的雪菜,决定找一点玩的来度过这愉快的晚上. 这家旅店提供一种特色游戏,游戏有n张牌,各写 ...
- 随机函数(Pascal入门)
随机函数是最主要的,在比赛的时候我们能够用随机函数来測试自己的程序是否会超时. 随机函数也能够做出一些大数据.用于两个程序之间对拍(一个是爆搜.一个是正解). 当然平时我们也能够用随机函数測自己的程序 ...
- poj 3308 (最大流)
题意:n*m的地图,给出L个火星人登陆的坐标,要在火星人登陆地球的瞬间全部消灭他们,有一种激光枪,一次可以消灭一行(或一列),消灭一行(或一列)有不同的代价,总代价是所有激光枪的代价之积. 思路:之前 ...
- C#实训 打字游戏
StatusStrip控件 状态条 =进度条+标签 等集合体
- LAMP的安装
一,LAMP的安装流程:mysql.apache.php或者apache.mysql.php.php放到最后的原因是,php在编译安装的时候是依赖于前2者的. 二,Mysql的安装: 1.下载mysq ...
- mysql跟踪提交的SQL语句
http://www.cnblogs.com/wuyifu/p/3328024.html