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 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...
随机推荐
- 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)
精神是好的.但是,我看了你的产品和网站:你选的创业方向基本是死路一条,我劝你该放弃就放弃.我判断你的思路还局限在IT行业内,创业不要在IT业内创,要走出去,睁开眼看看别人的世界,自己体会.我不是打击你 ...
- WPF笔记(2.7 文字布局)——Layout
原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock 最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...
- VS2010常用的调试方法
1.一直以来都没用过command window, F5以后可以这样用,直接对一个函数,或者变量做模块测试 以下还有一些常用的技巧: 1 悬停鼠标查看表达式值 调试是很有挑战性的.比如在函数内逐步运行 ...
- Android EditText圆角的方法
一.在drawable下面添加xml文件rounded_editview.xml <?xml version="1.0" encoding="utf-8" ...
- zend支持sql server
1.修改Zend下Db下Adapter下Pdo下Abstract.php中的connect方法 protected function _connect() { // if we already hav ...
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
Linux系统的I/O也就是一般所说的低级I/O--操作系统提供的基本IO服务,与os绑定,特定于Linux平台.而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头 ...
- C#中Split分隔字符串的应用(C#、split、分隔、字符串)
转载地址 .用字符串分隔: using System.Text.RegularExpressions; string str="aaajsbbbjsccc"; string[] s ...
- HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)
原址地址:http://ibupu.link/?id=31 Problem Description P is a permutation of the integers from 1 to N(ind ...
- 【剑指offer】面试题23:从上往下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...
- UVA 10152-ShellSort(映射+栈)
题意: 给出一堆乌龟名字,乌龟能从本身位置爬到顶端. 要求求出从原本的顺序到目标顺序的最小操作.输出每次操作移到顶端的乌龟的名字. 解析:名字用映射对应编号,把目标状态的乌龟从上到下的编号按1到N编好 ...