zoukankan      html  css  js  c++  java
  • 生成器,推导式以及内置函数一

    生成器,推导式以及内置函数一

    1.生成器

    迭代器:python中内置的一种节省空间的工具.

    生成器的本质就是一个迭代器.

    迭代器和生成器的区别:一个是python自带的,一个是程序员自己写的.

    #在函数中将return改写为yield就是一个生成器
    #yield 会记录执行位置
    #return 和 yield 都是返回
    #return 可以写多个,但是只执行一次,yield可以写多个,还可以返回多次
    #一个__next__()对应一个 yield
    #生成器可以使用for循环获取值
    #yield from --将可迭代对象逐个返回
    #在函数的内部yield能将for循环和while循环进行临时暂停
    #定义一个生成器:1.基于函数 
    #             2.函数体中存在yield就是一个生成器
    #             3.函数名() 就是产生一个生成器
    
    写一个生成器:
        
    def func():
        print(123)
        yield "你好"
    func()              # 产生一个生成器
    
    def func():
        if 3 > 2:
            yield "你好"   # 停,并进行记录
        if 4 > 2:
            yield "你好"
        yield "大家好"
    g = func()         # 产生一个生成器
    print(g.__next__())             # for i in g:
    print(g.__next__())             #     print(i)
    print(g.__next__())
    
    
    def foo():
        for i in range(10):
            pass
        	yield i
        count = 1
        while True:
            yield count
            count += 1
    g = foo()
    print(next(g))           # 推荐使用 next()
    print(next(g))       
    print(next(g))           # for i in g:
    print(next(g))           #     print(i)
    
    坑 --会生成新的生成器
    print(foo().__next__())
    print(foo().__next__())
    
    
    #  send()
    def func():
        a = yield "send"
        print(a)
    g = func()
    print(g.send(None))    # 打印出 send
    print(g.send(123))     # 报错
    
    # 生成器的应用场景:
    
    def func():
        lst = []
        for i in range(10):
            lst.append(i)
        return lst
    print(func())        #[0,1,2,3,4,5,6,7,8,9]
    
    def func():
        for i in range(10):
            yield i
    g = func()
    for i in range(5):
        print(next(g))
        
    def func():
        lst = ["你","我","他","它"]
        for i in lst:
            yield i
    g = func()
    print(next(g))           # 你
    print(next(g))           # 我
    print(next(g))           # 他
    print(next(g))           # 它
    
    def func():
        lst1 = ["你","我","它"]
        lst2 = ["他","她","昵"]
        yield from lst1          # yield 将可迭代对象逐个返回
        yield from lst2
    g = func()
    print(next(g))        # 你
    print(next(g))        # 我
    print(next(g))        # 它
    

    2.推导式

    list推导式:
    [变量(加工后的变量) for循环]
    [变量(加工后的变量) for循环 加工条件]
    生成器表达式:
    (变量(加工后的变量) for循环)
    (变量(加工后的变量) for循环 加工条件)
    字典推导式:
    {键:值 for循环 加工条件}
    集合推导式:
    {变量(加工后的变量) for循环 加工条件}
    
    
    list推导式
    print([i for i in range(20)])
    
    循环模式
    print([i+1 for in range(10)])
    [变量 for i in range(20)]
    
    筛选模式
    
    lst = []
    for i in range(20):
    	if i % 2 == 0:
    		lst.append(i)
    print(lst)
    
    print([i for i in range(20) if i % 2 == 0])
    [变量(加工后的变量) for循环 加工方式]
    
    生成器表达式:
    
    循环模式:
    g = (i for i in range(20))
    print(next(g))
    print(next(g))
    print(next(g))
    
    print(list(i for i in range(20)))
    
    筛选模式
    g = (i for i in range(50) if i % 2 == 0 )
    for i in g:
    	print(i)
    	
    字典推导式:
    print({i:i+1 for i in range(10)})
    {键:值 for循环 加工条件}
    
    集合推导式:
    print({i for i in range(10)})
    print({i for i in range(10) if i % 2 == 0})
    

    3.内置函数一

    # eval()   执行字符串类型的代码,并返回最终结果
    s = "2+2"
    print(eval(s))   #4
    
    # exec()   执行字符串类型的代码
    s = '''
    for i in [1,2,3]
    	print(i)
    '''
    print(exec(s))  # 1 2 3            #工作中禁止使用
    
    #hash()    获取一个对象(可哈希对象)的哈希值
    print(hash(1))
    
    #help()    用于查看函数或模块用途的详细说明
    print(help(list))
    
    #callable() 函数用于检查一个对象是否是可调用的,True仍可能调用失败
    #             False也不一定绝对成功
    name = "alex"
    def func():
        pass
    print(callable(name))     # False
    print(callable(func))     # True
    
    #int()    将一个字符串或数字转换成整型  
    print(int('12'))  # 12
    
    #float()  用于将整数和字符串转换成浮点数
    print(float(2))  # 2.0
    
    #complex()   用于转换一个字符串或数为复数
    print(complex(1,2))    # (1+2j)
    
    #bin()  将十进制转换成二进制字符串并返回
    print(bin(10))    # 0b1010
    
    #oct()  将十进制转换成八进制字符串并返回
    print(oct(10))   # 0o12
    
    #hex() 将十进制转换成十六进制字符串并返回
    print(hex(10))   # 0xa
    
    #divmod() 获取商和余
    print(divmod(7,2)) # (3,1)
    
    #round() 保留浮点数的小数位数,默认保留整数
    print(round(7/3,2))  #2.33
    
    #pow()    求幂
    print(pow(2,3))  # 两个参数为2**3次幂
    print(pow(2,3,3))  # 三个参数为2**3次幂,对3取余。
    
    #bytes()  用于不同编码之间的转化
    s = '你好'
    bs = s.encode('utf-8')
    print(bs)
    
    #ord() 输入字符找当前字符编码的位置
    print(ord('a'))  # 97
    
    #chr() 输入当前编码的位置数字找出其对应的字符
    print(chr(20013))  # 中
    
    #repr() 返回一个对象的string形式(原形)
    s = "C:u3000"
    print(repr(s))     # 'C:u3000'
    
    #all() 可迭代对象中,全都是True才是True
    print(all([1,2,True,0]))   #False
    
    #any() 可迭代对象中,有一个True就是True
    print(any([1,'',0]))    # True
    
    #global() 查看全局空间中的变量
    #locals() 查看当前空间的变量
    name = 1
    def func():
        a = 123
        print(locals())    # {'a':123}
        print(globals())   #全局空间中的变量
    func()
    
  • 相关阅读:
    [LeetCode]113. Maximum Depth of Binary Tree二叉树的最大深度
    [LeetCode]112. Maximum Subarray最大和连续子序列
    [LeetCode]111. Find Minimum in Rotated Sorted Array II旋转数组最小值II
    [LeetCode]110. Find Minimum in Rotated Sorted Array旋转数组最小值
    [LeetCode]109. Construct Binary Tree from Inorder and Postorder Traversal由中序序列和后序序列重建二叉树
    [LeetCode]108. Construct Binary Tree from Preorder and Inorder Traversal由前序序列和中序序列重建二叉树
    [LeetCode]107. Best Time to Buy and Sell Stock III股票买卖III
    [LeetCode]106. Best Time to Buy and Sell Stock II股票买卖II
    [LeetCode]105. Word Search单词查找
    一些杂事之后,该收心了
  • 原文地址:https://www.cnblogs.com/tutougold/p/11214666.html
Copyright © 2011-2022 走看看