1.  

第一节装饰器复习和知识储备------------

  1. 第一节装饰器复习和知识储备------------
  2. def wrapper(*args,**kwargs):
  3. index(*args,**kwargs)
  4. # * 的作用是把位置参数打散传值到args=[a,b,c]
  5. # **的作用是把关键字参数打散传值到kwargs=[a,b,c]
  6. def index(a,b,c):
  7. print(a,b,c)
  8. wrapper('tt','pppp',c='vvv')
  9.  
  10. 二:函数可以被当做数据传递.
  11.  
  12. 函数可以当做参数传给另外一个函数
  13. 一个函数的返回值也可以是一个函数
  14.  
  15. 三.名称空间和作用域.
  16. 名称空间分为三种:
  17. 内置名称空间:python解释器启动则生效
  18. 全局名称空间:执行python文件时生效
  19. 局部名称空间:调用函数时,临时生效,函数调用结束时失效
  20.  
  21. 加载顺序==> 内置 --->全局 --->局部名称空间
  22.  
  23. 名字查找的顺序是: 局部 -->全局 --->内置名称空间
  24.  
  25. 作用:
  26. 分两种:
  27. 全局作用域 全局存活
  28. 和局部作用域. 临时存活 函数内部使用 局部有效

第二节闭包函数.函数的作用域关系在定义阶段就有了,和调用阶段无关.

  1. 第二节闭包函数.函数的作用域关系在定义阶段就有了,和调用阶段无关.
  2.  
  3. 定义在函数内部的函数叫闭包函数.
  4.  
  5. 包含对外部作用域而不是全局作用域的引用.
  6. x=1
  7. def outter():
  8. x=2
  9. def inner():
  10. print(x)
  11. return inner
  12. f=outter()
  13. f()
  14.  
  15. #获取的f不止inner函数,还有外面的一层作用域.
  16.  
  17. from urllib.request import urlopen
  18. def outget(url):
  19. def get():
  20.  
  21. return urlopen(url).read()
  22. return get
  23.  
  24. baidu=outget('http://www.baidu.com')
  25. print(baidu())
  26.  
  27. 第三迭代器.===========不依赖于索引取值的方式
  28. 一般迭代可以有索引的
  29. l=[1,2,3,4]
  30. i=0
  31. while i < len(l):
  32. print(l[i])
  33. i+=1
  34.  
  35. print('hello'.__iter__())
  36. print('hello'.__iter__)
  37.  
  38. 可迭代的对象.只要对象内只有__iter__方法,obj.__iter__
  39.  
  40. 可迭代对象有:字符串 列表 元祖 字典 文件
  41.  
  42. 迭代器对象对象既内只有__iter__方法,又内置有__next__方法. 文件是迭代器对象
  43.  
  44. 可迭代对象不一定是迭代器对象,迭代器对象一定是可迭代对象
  45.  
  46. dic={'aa':1,'bb0':2,'cc':3}
  47.  
  48. dc=dic.__iter__()
  49.  
  50. dc.__next__
  51.  
  52. #可迭代对象执行了__iter__()方法后就变成了迭代器对象.
  53.  
  54. #######获取迭代器的下一个值
  55. dic={'aa':1,'bb0':2,'cc':3}
  56.  
  57. dc=dic.__iter__()
  58.  
  59. print(dc.__next__())
  60. ----------------------不依赖于索引的取值.
  61. with open('tt2.txt','r',encoding='utf-8') as f:
  62. print(next(f))
  63. print(next(f))
  64. print(next(f))
  65.  
  66. dic={'aa':1,'bb0':2,'cc':3}
  67. tt=dic.__iter__()
  68. print(next(tt))
  69. print(next(tt))
  70. print(next(tt))
  71.  
  72. dic={'aa':1,'bb0':2,'cc':3}
  73. dc=dic.__iter__()
  74.  
  75. while True:
  76. try:
  77. print(next(dc))
  78. except:
  79. break
  80.  
  81. =============第八迭代器下.
  82.  
  83. for就是系统的迭代器.
  84. for循环会把可迭代对象,变为迭代器.
  85.  
  86. 迭代器对象没有值,只有在next的时候才获取值.
  87. 这样更节省内存.
  88.  
  89. aa=range(1000000000)
  90. tt=aa.__iter__()
  91.  
  92. print(tt.__next__())
  93. print(tt.__next__())
  94. print(tt.__next__())
  95. 很多字典列表变为迭代器对象了.
  96.  
  97. from collections import Iterable,Iterator
  98.  
  99. print(isinstance('hello',Iterable))
  100.  
  101. print(isinstance('hello',Iterator))
  102.  
  103. ----------------第九生成器.只要定义函数内部出现yield关键字,
  104. #name再调用该函数,将不会立即执行该函数代码,将会得到该结果就是生成器对象.
  105.  
  106. 生成器的本质就是迭代器.return只能返回一次值.yield可以返回多次值.
  107.  
  108. def fc():
  109. print("111111111")
  110. yield 1
  111. print("2222")
  112. yield 2
  113. print("33333333")
  114. yield 3
  115.  
  116. g=fc()
  117.  
  118. print(g)
  119. print(next(g))
  120. print(next(g))
  121. ##############
  122. <generator object fc at 0x02C944E0>
  123. 111111111
  124. 1
  125. 2222
  126. 2
  127.  
  128. yield的功能:
  129. 为我们提供了一种自定义迭代器的方式
  130.  
  131. 对比return,可以返回多次值,挂起函数的运行状态.
  132.  
  133. 一次yield对应一次next多了报错.
  134. def fc():
  135. print("111111111")
  136. yield 1,2,'yyy'
  137. print("2222")
  138. yield 2
  139. print("33333333")
  140. yield 3
  141. g=fc()
  142. for i in g:
  143. print(i)
  144. for i in g:
  145. print(i)
  146. #第二次for循环不会取值. 一次就将for循环的值取完了.
  147.  
  148. =================10节生成器下
  149. def my_range(start,stop,step):
  150. while start < stop:
  151. yield start
  152. start+=step
  153. f=my_range(1,4,1)
  154.  
  155. print(next(f))
  156. print(next(f))
  157. print(next(f))
  158. print(next(f))
  159. print(next(f))
  160.  
  161. def my_range(start,stop,step):
  162. while start < stop:
  163. yield start #这里获取到的是一个生成器,通过next()可以获取到生成器的值.
  164. start+=step
  165. f=my_range(1,4,1)
  166. # print(next(f))
  167. # print(next(f))
  168. # print(next(f))
  169. for i in f:
  170. print(i)
  171.  
  172. -----------模仿grep tail的功能的实现
  173. #tail 'tt2.txt'|grep '404'
  174. #把每次tail的值传给greo_file函数
  175. import time
  176. def tailpath(f_ph):
  177. with open(f_ph,'r',encoding='utf-8') as f:
  178. f.seek(0,2)
  179. while True:
  180. line=f.readline()
  181. if line:
  182.  
  183. yield line
  184. else:
  185. time.sleep(1)
  186. def grep_file():
  187. lines=tailpath('tt2.txt')
  188. for line in lines:
  189. if '404' in line:
  190. print(line,'****')
  191. # break
  192. grep_file()
  193.  
  194. ----------------第二版
  195. #tail 'tt2.txt'|grep '404'
  196. #把每次tail的值传给greo_file函数
  197. import time
  198. def tailpath(f_ph):
  199. with open(f_ph,'r',encoding='utf-8') as f:
  200. f.seek(0,2)
  201. while True:
  202. line=f.readline()
  203. if line:
  204.  
  205. yield line
  206. else:
  207. time.sleep(1)
  208. def grep_file(patten,lines):
  209. for line in lines:
  210. if patten in line:
  211. print(line,'****')
  212. break
  213. grep_file('404',tailpath('tt2.txt'))
  214.  
  215. ---测试的写文件
  216. with open('tt2.txt','a',encoding='utf-8') as a:
  217. a.write("aaaaaaaaaa\n")
  218.  
  219. a.write("404fggggggggggggggg\n")
  220.  
  221. # print('404' in '404fggggggggggggggg')
  222. ----------------进化版
  223. #tail 'tt2.txt'|grep '404'
  224. #把每次tail的值传给greo_file函数
  225. import time
  226. def tailpath(f_ph):
  227. with open(f_ph,'r',encoding='utf-8') as f:
  228. f.seek(0,2)
  229. while True:
  230. line=f.readline()
  231. if line:
  232.  
  233. yield line
  234. else:
  235. time.sleep(1)
  236. def grep_file(patten,lines):
  237. for line in lines:
  238. if patten in line:
  239. yield line
  240. gp=grep_file('404',tailpath('tt2.txt'))
  241.  
  242. # for g in gp:
  243. # print(g)
  244.  
  245. print(next(gp))

11. 节开始yield的另外一种使用方式.主要作用是给闭包函数传送多个值和接收多个值.

  1. ===========11节开始
  2. ------yield的另外一种使用方式.主要作用是给闭包函数传送多个值和接收多个值.
  3. ---------------------send的作用一个是给yield赋值,一个是往下走.
  4. def eat(name):
  5. print('开始了 %s' %name)
  6. while True:
  7. food=yield
  8. print('%s 吃了 %s' %(name,food))
  9.  
  10. g=eat('egon')
  11. g.send(None)
  12. g.send('骨头')
  13.  
  14. ---------------------- send给的是yield变量获取的的值,tt=g.send('')返回值是yield后面的值.
  15.  
  16. def eat(name):
  17. print('开始了 %s' %name)
  18. while True:
  19. food=yield 123
  20. print('%s 吃了 %s' %(name,food))
  21.  
  22. g=eat('egon')
  23. g.send(None)
  24. g.send('骨头')
  25. print(g.send('骨头'))
  26.  
  27. g.send('骨头')
  28. next(g)
  29.  
  30. ----send的值给了赋值得的变量,send获取了yield的返回值.
  31.  
  32. 开始了 egon
  33. egon 吃了 骨头
  34. egon 吃了 骨头
  35. 123
  36. egon 吃了 骨头
  37. egon 吃了 None
  38.  
  39. def eat(name):
  40. list_food=[]
  41. print('开始了 %s' %name)
  42. while True:
  43. food=yield list_food
  44. print('%s 吃了 %s' %(name,food))
  45. list_food.append(food)
  46.  
  47. g=eat('egon')
  48. g.send(None) #或者next(g)
  49. g.send('骨头')
  50. print(g.send('shi'))
  51. #-----
  52. #开始了 egon
  53. #egon 吃了 骨头
  54. #egon 吃了 shi
  55. #['骨头', 'shi']
  56.  
  57. ----------一个函数多次传值.
  58. def tt():
  59.  
  60. while True:
  61. x=yield
  62. print(x)
  63.  
  64. g=tt()
  65. g.send(None)
  66. g.send(11)
  67. g.send(2)
  68. g.close()
  69.  
  70. ---------------------send的作用一个是给yield赋值,一个是往下走. def eat(name): print('开始了 %s' %name) while True: food=yield print('%s 吃了 %s' %(name,food)) g=eat('egon') g.send(None) g.send('骨头') ---------------------- send给的是yield变量获取的的值,tt=g.send('')返回值是yield后面的值. def eat(name): print('开始了 %s' %name) while True: food=yield 123 print('%s 吃了 %s' %(name,food)) g=eat('egon') g.send(None) g.send('骨头') print(g.send('骨头')) g.send('骨头') next(g) ----send的值给了赋值得的变量,send获取了yield的返回值. 开始了 egon egon 吃了 骨头 egon 吃了 骨头 123 egon 吃了 骨头 egon 吃了 None def eat(name): list_food=[] print('开始了 %s' %name) while True: food=yield list_food print('%s 吃了 %s' %(name,food)) list_food.append(food) g=eat('egon') g.send(None) #或者next(g) g.send('骨头') print(g.send('shi')) #----- #开始了 egon #egon 吃了 骨头 #egon 吃了 shi #['骨头', 'shi'] ----------一个函数多次传值. def tt(): while True: x=yield print(x) g=tt() g.send(None) g.send(11) g.send(2) g.close()

第十二节.面向过程编程.

  1. =======第十二节.面向过程编程.
  2. import os
  3.  
  4. tt=os.walk(r'D:\PycharmProjects\wadsd')
  5.  
  6. print(tt)
  7. print(next(tt))
  8.  
  9. #os.walk返回一个生成器
  10. #next(tt) 返回三个值得元祖,第一个值当前目录,第二个值当前目录下的目录 第三个值 返回当前目录下的文件.
  11.  
  12. <generator object walk at 0x02A144E0>
  13. ('D:\\PycharmProjects\\wadsd', ['.git', '.idea', 'day1', 'day2', 'day3', 'day4'], ['11.txt', '文件.py'])
  14.  
  15. -----------打印目录下的文件的绝对路径
  16. import os
  17. def search(target):
  18. g = os.walk(r'D:\PycharmProjects\wadsd')
  19.  
  20. for dirname,_,files in g:
  21. for file in files:
  22. abs_path=r'%s\%s' %(dirname,file)
  23. target.send(abs_path)
  24. def opener():
  25. while True:
  26. abs_path=yield
  27. print(abs_path)
  28. g=opener()
  29. next(g)
  30. search(g)
  31.  
  32. -------再写一遍
  33. import os
  34. def get_path(pp):
  35. g=os.walk(r'D:\PycharmProjects\wadsd\day4')
  36. for base_apth,_,files in g:
  37. abs_path='%s\%s' %(base_apth,files)
  38. pp.send(abs_path)
  39. def pp():
  40. while True:
  41. abs_path=yield
  42. print(abs_path)
  43. tt=pp()
  44. next(tt)
  45. get_path(tt)
  46. ----------------------------这个要多抄一些.
  47. import os
  48. def gv_fun(fun):
  49. def wrapper(*args,**kwargs):
  50. gg = fun(*args,**kwargs)
  51. next(gg)
  52. return gg
  53. return wrapper
  54. @gv_fun
  55. def pp():
  56. while True:
  57. abs_path=yield
  58. print(abs_path)
  59. def get_path(pp):
  60. g=os.walk(r'D:\PycharmProjects\wadsd\day4')
  61. for base_apth,_,files in g:
  62. abs_path='%s\%s' %(base_apth,files)
  63. pp.send(abs_path)
  64. get_path(pp())
  65.  
  66. ------------------------------------------------------
  67. import os
  68. def wrapper(fun):
  69. def inner(*args,**kwargs):
  70. gg=fun(*args,**kwargs)
  71. next(gg)
  72. return gg #最后要返回 生成器
  73. return inner
  74. def get_path(pt): #这个是最后执行的方法 #这里获取了生成器为了下一步的send发送信息
  75. g_p=os.walk(r'D:\PycharmProjects\wadsd\day4')
  76. for base_dir,_,files in g_p:
  77. abs_path='%s\%s' %(base_dir,files)
  78. pt.send(abs_path)
  79. #装饰器是装饰生成器,应为生成器每次生成器每次生成之后都需要做一次next操作,
  80. # 装饰器是装饰一个对象每次方法前或者方法后执行的内容
  81. @wrapper
  82. def pt():
  83. while True:
  84. abs_p=yield
  85. print(abs_p)
  86.  
  87. get_path(pt())

第七节:三元表达式 列表推导式  生成器表达式.

  1. 第七节:三元表达式 列表推导式 生成器表达式.
  2.  
  3. 1.三元表达式
  4. # def my_max(x,y):
  5. # if x>y:
  6. # print(x)
  7. # return(x)
  8. # else:
  9. #
  10. # return y
  11. #
  12. # print(my_max(10,20))
  13.  
  14. x=10
  15. y=5
  16. tt=x if x > y else y
  17.  
  18. print(tt)
  19.  
  20. a=111
  21. b=222
  22.  
  23. pp=a if a>b else b
  24. print(pp)
  25.  
  26. name=input("ttt:")
  27.  
  28. res='SB' if name=='alex' else 'NB'
  29. print(res)
  30.  
  31. 2.列表推导式
  32. 生成一个列表
  33. l= []
  34.  
  35. for i in range(1,11):
  36. # print(i)
  37. res='egg%s'%(str(i))
  38. l.append(res)
  39.  
  40. print(l)
  41.  
  42. tt=['egg%s'%(str(i)) for i in range(1,10)]
  43.  
  44. print(tt)
  45.  
  46. ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  47. pp=[str(i) for i in 'hello']
  48.  
  49. print(pp)
  50.  
  51. ---列表推导式衍生版本,后面加条件
  52. tt=[str(i) for i in range(10) if i>6 and i<10]
  53.  
  54. print(tt)
  55.  
  56. 3.生成器表达式,将列表表达式的[]中括号改为()小括号
  57.  
  58. tt=['egg%s'%(str(i)) for i in range(5,1000) if i>500 and i<600]
  59.  
  60. print(tt)
  61.  
  62. tt2=('egg%s'%(str(i)) for i in range(5,1000) if i>500 and i<600)
  63. print(tt2)
  64. print(next(tt2))
  65. #列表表达式生成的是一个生成器.
  66. <generator object <genexpr> at 0x031554E0>
  67. egg501
  68.  
  69. #生成器表达式的优点是一次生成一个值在内存.

第八节声明式编程.

  1. 第八节声明式编程.
  2.  
  3. # 将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写)
  4. names=['egon','alex_sb','wupeiqi','yuanhao']
  5. NM=[i.upper() for i in names]
  6. print(NM)
  7.  
  8. # 将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
  9. names=['egon','alex_sb','wupeiqi','yuanhao']
  10. nn=[i for i in names if not i.endswith('sb')]
  11.  
  12. print(nn)
  13.  
  14. # 求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
  15. l=[]
  16. with open(r'tt2.txt','r',encoding='utf-8') as f:
  17. tt=[len(line) for line in f] # (len(line) for line in f) 写一个生成器比列表更好
  18. print(tt)
  19. print(max(tt)
  20.  
  21. # 4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
  22. with open('tt2.txt', encoding='utf-8') as f:
  23. print(sum(len(line) for line in f))
  24.  
  25. # tesla,1000000,10
  26. # chicken,200,1
  27. #
  28. # 求总共花了多少钱?
  29. #
  30. # 打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]
  31. #
  32. # 求单价大于10000的商品信息,格式同上
  33.  
  34. with open('tt2.txt','r',encoding='utf-8') as f:
  35.  
  36. info_name=[ 'name:%s'%(line.split(',')[0]) for line in f]
  37. print(info_name)
  38.  
  39. with open('tt2.txt','r',encoding='utf-8') as f:
  40. info_sum=['sum:%s'%(int(line.split(',')[1])*int(line.split(',')[2])) for line in f]
  41. print(info_sum)
  42.  
  43. tt=(i for i in range(10))
  44. print(max(tt))
  45. # print(max(tt))
  46.  
  47. 上面第二行报错的原因是获取的g是一个生成器,max相当于迭代器,第一次迭代后无法做二次迭代相当于for循环.
  48.  
  49. with open('tt2.txt','r',encoding='utf-8') as f:
  50. print(max((len(i) for i in f)))

第九节递归调用.

  1. #递归调用在调用一个函数的时候直接或者间接,调用了自己
  2.  
  3. def fun1(n):
  4. print("===",n)
  5. fun1(n+1)
  6.  
  7. fun1(1)
  8. #python最大调用层数10000
  9. === 997
  10. === 998Traceback (most recent call last):
  11.  
  12. import sys
  13.  
  14. print(sys.getrecursionlimit())
  15. #
  16. 1000

python第四周迭代器生成器序列化面向过程递归的更多相关文章

  1. python全栈开发-Day11 迭代器、生成器、面向过程编程

    一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...

  2. Python之路【第六篇】:Python迭代器、生成器、面向过程编程

    阅读目录 一.迭代器 1.迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 代码如下: while True: ...

  3. python之迭代器、生成器、面向过程编程

    一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...

  4. python之迭代器、生成器与面向过程编程

    目录 一 迭代器 二 生成器 三 面向过程编程 一.迭代器 1.迭代器的概念理解 ''' 迭代器从字面上理解就是迭代的工具.而迭代是每次的开始都是基于上一次的结果,不是周而复始的,而是不断发展的. ' ...

  5. python之旅:迭代器、生成器、面向过程编程

    1.什么是迭代器? 1.什么是迭代器 迭代的工具 什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的 # 单纯的重复并不是迭代 while True: print('=====& ...

  6. python基础知识14---迭代器、生成器、面向过程编程

    阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...

  7. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  8. Python函数系列-迭代器,生成器

    一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...

  9. python自动化开发-[第五天]-面向过程、模块、包

    今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...

随机推荐

  1. Qemu 有用的链接

    Qemu下载和编译 Download https://en.wikibooks.org/wiki/QEMU/Linux https://en.wikibooks.org/wiki/QEMU/Insta ...

  2. 利用Teensy进行EM410x卡模拟以及暴力破解EM410X类门禁系统可行性猜想

    前些天Open入手了Teensy++2.0模拟EM410X,并且针对EM410X的门禁进行了一次暴力破解测试,以下就是相关代码以及内容. 什么是低频?什么是EM410x? 首先,我不得不再次提一下那些 ...

  3. linux中查找文件属于那个软件包的方法

    一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...

  4. servlet虚拟路径映射

    在web.xml文件中,一个<servlet-mapping>元素用于映射一个Servlet的对外访问路径,该路径也称为虚拟路径.例如<url-pattern>/TestSer ...

  5. Unity3D之高级渲染-Shader Forge增强版

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家.特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  6. Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装

    Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...

  7. Dubbo超时机制导致的雪崩连接

    Bug影响:Dubbo服务提供者出现无法获取Dubbo服务处理线程异常,后端DB爆出拿不到数据库连接池,导致前端响应时间异常飙高,系统处理能力下降,核心基础服务无法提供正常服务. ​Bug发现过程: ...

  8. 对AOP切面的一些整理与理解

      首先上一张AOP的图示 一:几个重要的概念   1> 切面:横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象[验证切面.日志切面]   2> 通知:切面中的每个方法   3& ...

  9. Django——django1.6 基于类的通用视图

    最初 django 的视图都是用函数实现的,后来开发出一些通用视图函数,以取代某些常见的重复性代码.通用视图就像是一些封装好的处理器,使用它们的时候只须要给出特定的参数集即可,不必关心具体的实现.各种 ...

  10. JAVA的IO操作:内存操作流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...