11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器)

1、默认参数的坑

# 比较特殊,正常来讲临时空间执行结束后应该删除,但在这里不是.
def func(a,l=[]):
    l.append(a)
    return l
print(func(1)) # [1]
print(func(2)) # [1,2]
print(func(3)) # [1,2,3]

2、函数名的应用

  1. 函数名指向的是函数的内存地址,加上()就执行这个函数python

    def func(args):
        return args
    print(func) # <function func at 0x00000000024656A8>
    print(func(1)) # 1
  2. 函数名是一个变量app

    def age1(a):
        return a
    age2=age1
    age3=age2
    print(age3(1)) # 1
  3. 函数名能够做为容器类类型的元素函数

    def func1():
     print("in func1")
    def func2():
     print("in func2")
    def func3():
     print("in func3")
    l=[func1,func2,func3]
    print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>]
    for i in l:
     i()
    # in func1
    # in func2
    # in func3
  4. 函数名能够做为函数的实参进行传参工具

    def func(argv):
     print(argv)
    def func1():
     print("in func1")
    def func2(argv):
     argv()
     print("in func2")
    a=1
    func(a) # 1 
    func2(func1) 
    # in func1
    # in func2
  5. 函数名能够做为函数的返回值code

    def func1():
     print("in func1")
    def func2(argv):
     print("in func2")
     return argv
    ret=func2(func1)
    print(ret) 
    # in func2
    # <function func1 at 0x0000000001DF56A8>

3、可迭代对象

  1. 字面意思分析 : 能够重复迭代的实实在在的东西,list,dict,keys(),values(),tuple,str,set,range,文件句柄这些都属于可迭代对象对象

  2. 专业角度分析 : 内部含有'_ iter _'方法的对象,就是可迭代对象索引

    内置函数 : dir()用来获取对象内部属性的方法,可用来判断对象是否符合可迭代要求.内存

  3. 优势 : 直观,操做方法较多
  4. 缺点 : 占用内存(字典除外),不能迭代取值,索引,字典keyit

4、迭代器

  1. 字面意思分析 : 能够重复迭代的工具io

  2. 专业角度分析 : 内部含有'_ iter_ '而且含有'_ next _'方法的对象,就是迭代器

    可迭代对象转化成迭代器用iter(),迭代器能够迭代取值,利用next()进行取值,迭代器一条路走到底,不走回头路

  3. 优势 : 很是节省内存,惰性机制

  4. 缺点 : 不直观,操做不灵活,效率相对低

    l1=[1,2,3,4,5]
    obj=iter(l1)
    print(next(obj)) # 1
    print(next(obj)) # 2
    print(next(obj)) # 3
    print(next(obj)) # 4
    print(next(obj)) # 5
    print(next(obj)) # 报错

利用while循环,模拟for循环内部循环可迭代对象机制

  1. 先要将可迭代对象转化成迭代器

  2. 利用next()对迭代器进行取值

  3. 利用异常处理try,处理报错

    l1=[1,2,3,4,5]
    l2=iter(l1)
    while 1:
        try:
            print(next(l2))
        except StopIteration:
            pass

5、可迭代对象与迭代器对比

  1. 可迭代对象是一个操做比较灵活,直观,效率相对较高,可是比较占用内存的数据集
  2. 迭代器是一个很是节省内存,知足惰性机制,可是效率相对较低,操做不灵活的数据集
相关文章
相关标签/搜索