目录

一、迭代器

二、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的更多相关文章

  1. python学习day4软件目录结构规范

    为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...

  2. Python学习-day4

    学习装饰器,首先听haifeng老师讲解了一下准备知识. 1.函数即变量 2.高阶函数+嵌套函数==>装饰器 装饰器的作用是在,1)不改变源代码,2)不改变原函数的调用方式的前提下为函数增加新的 ...

  3. Python学习day4 数据类型Ⅱ(列表,元祖)

    day4 知识补充&数据类型:列表,元祖 1.知识补充 1.编译型/解释型 编译型:在代码编写完成之后编译器将其变成另外一个文件教给你算计执行. 代表语言:Java,c,c++ ,c#, Go ...

  4. python学习day4 数据类型 if语句

    1.变量的内存管理 cpython解释器垃圾回收机制 什么是垃圾,当一个值身上没有绑定变量名时,(该值的引用计数=0时)就是一个垃圾 age=18 #18的引用计数=1 x=age  #18的引用计数 ...

  5. python学习day4之路文件的序列化和反序列化

    json和pickle序列化和反序列化 json是用来实现不同程序之间的文件交互,由于不同程序之间需要进行文件信息交互,由于用python写的代码可能要与其他语言写的代码进行数据传输,json支持所有 ...

  6. python学习day4之路

    装饰器(http://egon09.blog.51cto.com/9161406/1836763) 1.装饰器:本质是函数: 装饰器(装饰其他函数),就是为其他函数添加附加功能: 原则:1.不能修改被 ...

  7. python学习Day4 流程控制(if分支,while循环,for循环)

    复习 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的变量,魔法变量 - ...

  8. python学习 day4 (3月5日)---列表

    列表: 容器性数据 有序  可更改 大量数据 一.增 1.追加    append(objcet) 2.索引增加   Insert(index,元素) 3.迭代追加   extend(object) ...

  9. Python学习笔记,day4

    Python学习第四天 一.装饰器 函数调用顺序: 其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...

随机推荐

  1. HTML+CSS学习

    1.彻底弄懂CSS盒子模式(DIV布局快速入门) 2.在CSS中,BOX的Padding属性的数值赋予顺序为padding:10px; 四个内边距都是10px padding:5px 10px; 上下 ...

  2. html 标签释义

    position  位置  给....定位   作用:定位 position:fixed  锁定游览器位置 如右下角弹窗 absolute  绝对定位    游览器左上角      position: ...

  3. PHP标记

    1. xml风格 <?php echo 'ok'; ?> 推荐风格 2. 简短风格 <? echo 'ok'; ?> 限制条件:在配置文件中启用short_open_tag选项 ...

  4. RHEL 7.0 修改防火墙配置

    RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...

  5. C++ Primer day 01

    1.标准输入与输出 #include<iostream> int main(){ int v1,v2; std::cout<<"Enter two numbers:& ...

  6. Java 遍历Map

    Set<Map.Entry<String, String>> aSet = map.entrySet(); Iterator<Map.Entry<String, S ...

  7. Apache监控

    Apache性能监控 http://www.cnblogs.com/fnng/archive/2012/11/11/2765463.html 要监控apache的性能,我们需要修改配置文件,允许查看a ...

  8. Code Generation and T4 Text Templates

    Code Generation and T4 Text Templates Code Generation and T4 Text Templates

  9. laravel5.3 笔记一

    laravel5.3 笔记 安装环境 laravel环境,laravel中文学习论坛上面有相关的教程 创建应用 laravel new blog 其中blog就是你的应用的名字 数据迁移 php ar ...

  10. .net项目中上传大图片失败

    .net项目中有时用户提出要上传大图片,一张图片有可能十几兆,本来用的第三方的上传控件,有限制图片上传大小的设置,以前设置的是2M.按照用户的要求,以为直接将限制图片上传大小的设置改下就可以了,但是当 ...