zoukankan      html  css  js  c++  java
  • python 基础篇 14 程程器表达式 内置函数

    昨日内容回顾
        可迭代对象:
            内部含有__iter__方法的就是可迭代对象.
            可迭代对象不能取值,因为内部不含有__next__方法.

        可迭代对象 ---> 迭代器.
            obj.__iter__()
            iter(obj)
        迭代器:
            内部含有__iter__,__next__ 方法的对象.
        迭代器的优点:
            1,节省内存.
            2,惰性机制.
            3,单向,不可逆.
        如何判断可迭代对象,迭代器.
            1,__iter__ in dir(obj)
            2,?

        生成器:
            自己用python代码写的迭代器就是生成器.
            生成器的本身就是迭代器.
        def func():
            print(1111)
            count = yield 222
            print(count)
            yield 333
        g_obj = func()
        g_obj.send(666)
        g_obj.__next__()

    --------------->>>>>>>>>>>>>本节重点 生成器表达式  列表推导式<<<<<<<<<<<<<<<<<-------------------

    构建一个列表:['python1期', 'python2期', 'python3期', 'python4期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期']

    l1 = []
    for i in range(1,14):
         l1.append('python%d期' % i)
    print(l1)

    列表推导式:

    # l3 = [ 'python%s期' % i for i in range(1, 14)]
    # print(l3)

    [变量(加工后的变量) for 变量 in iterable] 循环模式

    # 优点:
    # 1,节省代码,一行搞定.
    # 2,看着高大上.
    # 缺点:
    # ,不好排错.
    #整体:
    # 凡是用列表推导式构造的列表对象,用其他方式都可构建.,

    非常复杂的列表,列表推导式是构建不出的,
    # 列表推导式比较有魔性.

    #  构建一个列表:
    # ['技师0号','技师1号'... '技师15号']
    # print(['技师%s号' % i for i in range(16)])
    # ['护士1号', '护士3号','护士5号', ...,'护士13号']
    # print(['护士%s号' % i for i in range(1, 14, 2)])

    # 分类:
    # [变量(加工后的变量) for 变量 in iterable] 循环模式
    # [变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式
    # 10以内所有数的平方
    # print([i*i for i in range(11)])
    # 30以内所有能被3整除的数的平方
    # print([i**2 for i in range(31) if i % 3 == 0])
    # 100 以内所有的奇数.
    # print([i for i in range(1,101,2)])
    # print([i for i in range(101) if i % 2 == 1])

    生成器表达式

    1.把列表解析的[]换成()得到的就是生成器表达式

    2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

    g_obj = ('python%s期' % i for i in range(1,14)) # 循环模式
    g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0) # 筛选模式
    print(g_obj)
    print(g_obj.__next__())
    print(g_obj.__next__())
    print(g_obj.__next__())
    print(g_obj.__next__())
    for i in g_obj1:
    print(i)

    # 生成器:两种方式:
        # 生成器函数. yield
        # 生成器表达式

    # 为什么有生成器:
    # 生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中需要.

    #把列表names中有两个"e"的字符取到
    # names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
    #          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    列表推导式
    # l2 = [name for i in names for name in i if name.count('e') == 2]  
    普通方法:
    # l1 = []  
    # for i in names:
    #     for name in i:
    #         if name.count('e') == 2:
    #             l1.append(name)
    # print(l1)
    # print(l2)
    把mcase中的K,V键值互换位置
    # mcase = {'a': 10, 'b': 34}
    # print({mcase[i]: i for i in mcase})

    ------>>>>>>>内置函数:

    这个东西慢慢学吧,可以按住Ctrl看源码,也可以help一下,用着就都会了

    1.1作用域相关

    locals :函数会以字典的类型返回当前位置的全部局部变量。

    globals:函数以字典的类型返回全部全局变量。

    a = 1
    b = 2
    print(locals())
    print(globals())
    # 这两个一样,因为是在全局执行的。
    
    ##########################
    
    def func(argv):
        c = 2
        print(locals())
        print(globals())
    func(3)
    
    #这两个不一样,locals() {'argv': 3, 'c': 2}
    #globals() {'__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000024409148978>, '__spec__': None, '__file__': 'D:/lnh.python/.../内置函数.py', 'func': <function func at 0x0000024408CF90D0>, '__name__': '__main__', '__package__': None}

    1.2.1 字符串类型代码的执行 eval,exec,complie

    eval('2 + 2')  # 4
    n=81 eval("n + 4")  # 85
    eval('print(666)')  # 666

    exec:执行字符串类型的代码。

     s = '''
    for i in [1,2,3]:
        print(i)
    '''
    exec(s)

    complie没用,可以不记

    其他函数在这我就不一一列举了,如有需求可找度娘

  • 相关阅读:
    Java 开发问题
    include和request
    VC++6.0怎么显示行号
    快速排序
    如何解决虚拟机安装centos无法全屏显示问题!
    详解.NET 4.0新特性Dynamic相关知识
    Action C#
    windbg不常用命令2
    底层枚举 网络连接时的结构
    netbios 和smb
  • 原文地址:https://www.cnblogs.com/dalaoban/p/9204507.html
Copyright © 2011-2022 走看看