目录

一、迭代器

二、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. 2016_ThinkinG of everyDay

    2016-2-15:新年的第一篇心情,慢慢更新. 1.以后的文章当然都会是ACM竞赛的题解,但会多写写自己的思考以及总结,因为感觉自己缺少思考这个习惯,有些东西在脑子里也只是一带而过,最后也不会停留多 ...

  2. C/C++语言学习——内存分配管理

    1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...

  3. JavaScript插件 Bootstrap自带了13个jQuery插件,这些插件为Bootstrap中的组件赋予了“生命”

    原文:http://v2.bootcss.com/javascript.html#popovers

  4. CSS3之背景色渐变

    在css2时代,页面背景色渐变,按钮背景渐变效果主要是通过图片实现,css3中可通过 gradient 实现背景色渐变,图片作为一种资源,每次在页面加载时都要从服务器下载,这样如果页面很大需要渐变的效 ...

  5. CSS3匹配屏幕横竖状态

    @media是css3中新定义的,功能非常强大,下面简单讲解一下用css3的@media orientation匹配手机屏幕是横屏还是竖屏. 顾名思义PC是无法匹配横竖屏的,所以orientation ...

  6. 使用Calendar增加日期

    /** * @Description: 当前日期加上n个月返回long date */ public static long getLongDateAddMonth(int n){ Calendar ...

  7. MassMutual Interview Questions

    Company MassMutual Date 30/09/15 Location Boston, MA Position Application Developer It's not a codin ...

  8. (转)ZOJ 3687 The Review Plan I(禁为排列)

    The Review Plan I Time Limit: 5 Seconds      Memory Limit: 65536 KB Michael takes the Discrete Mathe ...

  9. GridFS

    GridFS是一个建立在MongoDB文档基础之上的轻量级的文件存储规范. GridFS的一个基本思想就是可以将一个大文件分成很多块.每块作为一个单独的文档存储. GridFS支持在文档中存储二进制数 ...

  10. Socket 相关的知识

    1.关于PF_INET和AF_INET的区别 在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程 ...