首页 > 技术文章 > python值函数名的使用以及闭包,迭代器

baijinshuo 2018-08-10 15:56 原文

一.函数名的运用

  函数名就是一个变量名,但它是一个特殊的变量名,是一个后面加括号可以执行函数的变量名.

 1 def func():
 2     print("我是一个小小的函数")
 3 a = func
 4 print(a)
 5 
 6 func()
 7 a()
 8 
 9 func = 3
10 print(func)

 

  函数名的命名规范与变量的命名规范一样.

  函数名可以作为列表中的元素进行存储.

  可以作为参数传给函数

def my():
    print("我是my")

def proxy(fn): # 代理模式. 装饰器
    print("在处理之前")
    fn()
    print("在处理之后")

proxy(my) # 把函数名作为参数传递给另一个函数

 

  可以作为函数的返回值

1 def func():
2     print("我是func")
3     a = 10 # 变量
4     def inner():
5         print("我是inner")
6     return inner
7 # ret = func()
8 # ret()
9 func()() # 先运行func()  然后在返回值上加()

 

二.闭包

  在内层函数中访问外层函数的局部变量

  好处:1.可以保护的变量不受外界影响

     2.可以让变量常驻内存

    语法:

1 def func1():
2     a =1
3     def func()
4         print(a)
5     return func()

三.迭代器

  使用dir来查看该数据包含了那些方法

  用来便利列表,字符串,元组....可迭代对象

  可迭代对象: Iterable,里面有__iter__()可以获取迭代七,没有__next__()

  迭代器:   Iterator,里面有__iter__()可以获取迭代器,还有__next__()

 1  s = 123
 2 for i in s:
 3     print(i)
 4 print(dir(str)) #  dir查看xx类型的数据可以执行哪些方法, __iter__  iterable
 5 print(dir(list)) # __iter__
 6 print(dir(int)) # 没有__iter__
 7 # 所有的带__iter__可以使用for循环的, 可迭代对象
 8 
 9 # 可迭代对象可以使用__iter__()来获取到迭代器
10 # 迭代器里面有__next__()
11 s = "石可心喜欢赵一宁"
12 it = s.__iter__() # 获取迭代器
13 print(dir(it)) # 迭代器里有__iter__ 还有__next__
14 
15 print(it.__next__()) #
16 print(it.__next__())    #
17 print(it.__next__())#
18 print(it.__next__())#
19 print(it.__next__())#
20 print(it.__next__())#
21 print(it.__next__())#
22 print(it.__next__())#

 

  迭代器的特点:

    1.只能向前

    2.惰性机制

    3.省内存(生成器)

  for循环的内部机制

    1. 首先获取到迭代器

    2.使用while循环获取数据

    3.it.__next__()来获取数据

    4.处理异常  try: xxx    except  StopIteration:

1 it = xx.__iter__()
2 while 1:
3     try:
4         data = it.__next__()
5         xxxxx
6     except StopIteration:
7         break

 

推荐阅读