zoukankan      html  css  js  c++  java
  • python函数六(生成器,内置函数)

    一。生成器

    生成器三种方式:

    1)生成器函数

    2)数据转化

    def gener():
        print(111)
        yield 222
        print(333)
        count = yield 444
        print(count)
        print(555)
        yield 666
    g = gener()
    print(g)
    # print(list(g))
    print(g.__next__())
    print(g.__next__())
    print(g.send('asd'))
    print(list(g))
    # 输出结果:
    # <generator object gener at 0x0000017116671BF8>
    # 111
    # 222
    # 333
    # 444
    # asd
    # 555
    # 666
    # []      此时生成器函数运行到yield 666 的位置,所以g转化成列表是空[]
    
    # 如果一开始只打印print(list(g))----->输出结果完全不同。结果如下:
    # 111
    # 333
    # None
    # 555
    # [222, 444, 666]

    3)用生成器表达式

    列表推导式与生成器表达式比较:

    列表推导式,生成器表达式
    1)列表推导式比较直观,占内存
    2)生成器表达式不容易看出内容,省内存.
    [ 变量(加工后的数据) for 变量i in 可迭代的数据类型 ] 列表的推导式, 循环模式
    [ 变量(加工后的数据) for 变量i in 可迭代的数据类型 if 条件] 列表的推导式, 筛选模式

    列表推导式

    # 打印选项1,选项2。。。直到选项10
    li = ['选项%s'%i for i in range(1,11)]
    print(li)
    
    # 打印30以内能被4整除的所有整数
    l1 = [i for i in range(31) if i % 4 == 0]
    print(l1)
    
    # 把{'name':'alex','age':29}里的键跟对应的值调换
    dic = {'name':'alex','age':29}
    dict = {dic[i]:i for i in dic}
    print(dict)
    
    # 把里面有两个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]
    print(l2)

    生成器表达式

    #  打印30以内能被4整除的所有整数
    l1 = (i for i in range(31) if i % 4 == 0)
    print(l1)     #<generator object <genexpr> at 0x0000026AFA1E1BF8>
    for i in l1:
        print(i)
    #
    # 0
    # 4
    # 8
    # 12
    # 16
    # 20
    # 24
    # 28

    二。内置函数

    Python自带的函数。比如range(),input(),len(),print(),dir(),max(),int(),min(),sum(),str(),list(),tuple(),id()

    1.

    #print()
    print('666',end='')
    print('666')
    # 输出结果:  666666
    print(1,2,3,4,5,sep='|')
    # 输出结果:  1|2|3|4|5
    
    # 可以直接把想写的内容写入文件
    f = open('file','w',encoding='utf-8')
    print(666,file=f)
    f.close()

    2.

    dir() 查找对象的所有方法
    print(dir([]))

    3.

    locals()  将局部的变量储存起来
    globals() 将全局的变量,函数名,等等 储存起来.
    def func():
        name = 'alex'
        print(locals())
        print(globals())
    func()

    4.

    help(str) 将你查询的对象所有信息都拿出来.

    5.

    # abs()取绝对值
    print(abs(-1))
    # 结果:  1
    def func(ret):
        print(44)
    # 最大值
    ret = max(1,2,-3,key=abs)
    print(ret)     #-3
    # #最小值
    ret = min([1,2,3])
    print(ret)      #1
    # #sum iterable,初始值
    ret = sum([1,2,3],10)
    print(ret)       #16

    6.

    #callable 判断此变量是不是函数名
    name = 'alex'
    print(callable(name))   #False
    def func():
        print(666)
    print(callable(func))   #True

    7.

    #hash() 通过哈希表的规则,将对象转换成哈希值
    print(hash('fdsakfhdsafsda'))
    print(hash('fd'))
    print(hash('fsdsafsda'))
    print(hash('fdsdsafsda'))
    print(hash('dsakhdsafsda'))
    print(hash(('a','b')))
    print(hash(True))
    # 输出结果:
    # 1415579162147690152
    # 5615420092049468879
    # 4610262276372645226
    # -5880321922146481963
    # -9092531373745077475
    # 1754971611771896552
    # 1

    8.

    #all 可迭代对象里面的所有的值转化成bool值如果都是True则,返回True
    print(all([1,2,3,0]))    #False

    9.

    #十进制转化成二进制
    print(bin(100))     #0b1100100
    # #将十进制转化成八进制
    print(oct(9))     #0o11
    # #将十进制转化成十六进制
    print(hex(33))     #0x21

    10.

    #数据类型str()
    #float  :有限小数,无线循环小数,不包含(无线不循环小数)
    print(1.35432,type(1.35432))    #1.35432 <class 'float'>
    print(float(3))      #3.0

    11.

    complex()
    '''
    实数: 有理数,无理数.
    虚数:j2
    复数: 1 + 2j
    '''

    12.

    #divmod() 分页
    print(divmod(7,2)) #(3,1)(商,余数)

    13.重要的

    #enumerate(iterable,start 起始值) 枚举
    l = ['手机','电话','耳机',]
    for i in enumerate(l):
        print(i)
    # 输出结果:
    # (0, '手机')
    # (1, '电话')
    # (2, '耳机')
    l = ['手机','电话','耳机',]
    for i,j in enumerate(l,100):
        print(i,j)
    # 输出结果:
    # 100 手机
    # 101 电话
    # 102 耳机

    14.

    #eval 有返回值 除去字符串两边的引号,返回里面的内容
    #exec 没有返回值 除去字符串两边的引号,执行里面的代码    #流程语句
    s = "{'name':'alex'}"
    s1 = "1+2+3+4"
    print(eval(s),type(eval(s)))           #{'name': 'alex'} <class 'dict'>
    print(exec(s),type(exec(s)))           #None <class 'NoneType'>
    print(eval(s1))                        #10
    code = '''for i in range(10):
        print(i)'''
    print(exec(code))                     # 0 1 2 3 4 5 6 7 8 9 None
  • 相关阅读:
    Mysql数据查询
    Mysql数据类型
    desc和show
    Mysql权限管理
    深入理解inode和硬链接和软连接和挂载点
    Linux用户和组
    VIM文本编辑器
    Linux文件操作
    MySQL基础
    八大排序
  • 原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8427643.html
Copyright © 2011-2022 走看看