zoukankan      html  css  js  c++  java
  • 迭代器

    关键字 global nonlocal

    global 声明全局变量 如果全局中 存在声明的变量 那么就使用;如果不存在,就创立一个

    ## 已存在的全局变量
    l = [1,2,3]
    l1 = l
    def func():
        global l
        l.append(10)
    func()
    print(l1)  ## [1,2,3,10]
    print(l)   ## [1,2,3,10]
    
    # 不存在的全局变量
    def func2():
    	global l2 
    	l2 = [1,2,3]
    	return l2
    func2()
    print(l2)
    
    

    在局部 , 有使用全局变量的权限,但是没有更改指向的权力

    l1 = []
    def func(args):
        l1.append(args)
        return l1
    print(func(1))
    print(func(2))
    print(func(3)) # 【1,2,3】
    
    

    预编译

    ## name在全局存在,也在内部存在,但是在使用后定义
    name = '报错了'
    import time
    def func():
        print(name)
        name = 10
    func() #会报错,因为name在内部定义前使用了,外部也存在,出现了歧义
    

    nonlocal 使用上一层 同时在locals里存在

    可变默认参数

    当默认参数为可变数据类型时,程序会开辟一个新空间,不会因函数执行结束而释放

    def func(a,l = []):
        l.append(a)
        return l
    l1 = func(1)
    l2 = func(2)
    l3 = func(3)
    l4 = func(4,[])
    print(l1,l2,l3,l4) # [1] [1,2] [1,2,3],[4]
    ## 个人理解 因为l没有传入,所以l= [] 除去第一次读取的时候执行过,之后也没有执行过l = [],所以l还是之前的列表指向
    ## 最后的l4 传入了新的[] 所以结果改变
    

    函数名的应用

    函数名也是变量名 所以可以相互引用,

    所以可以当 实参参数 返回值

    def func1(func):
    	return func()
    def func2():
       	print ('1')
    func1(func2)  # 1
    

    f 格式化

    s = f'几乎什么都可以放{everything}' ## 除了解析出来报错的东西 符号 
    

    可迭代对象

    只要对象中存在__ iter __ 方法 就是可迭代对象

    可迭代对象不能直接遍历 需要转换成迭代器

    dir() 内置函数 查看对象中所有方法和属性 返回的是列表
    ##测试是否是
    if '__iter__' in dir(对象):
    	pass
    

    迭代器

    可以重复迭代的工具

    对象内部含有__ iter__ () 方法 和 __ next__()就是可迭代对象

    迭代器的优点:

    1. 惰性机制
    2. 非常节省内存

    迭代器缺点

    1. 不直观
    2. 没有可用方法
    3. 效率低

    使用迭代器 用while模拟for

    l = [1,2,3]
    l1 = iter(l)
    while 1:
        try:
            print(next(l1))
        except:
            break
    

    可迭代对象与迭代器的对比

    可迭代对象:操作灵活,直观,效率相对高,占内存

    迭代器:节省内存,不直观

  • 相关阅读:
    oracle增加表空间大小
    oracle日常查看
    oracle报错ORA-01653 dba_free_space中没有该表空间
    大数据hadoop生态圈
    1104报表背景知识
    db2和oracle字段类型对比
    weblogic 内存配置
    java内存配置举例
    java内存和linux关系
    PHP连接Redis操作函数
  • 原文地址:https://www.cnblogs.com/albert0823/p/11051428.html
Copyright © 2011-2022 走看看