zoukankan      html  css  js  c++  java
  • python学习笔记(四):生成器、内置函数、json

    一、生成器

    生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间。

    1、 列表生成式,在第二篇博客里面我写了三元运算符,和那个有点像,如果要生成列表[‘01’, ‘02’, ‘03’, ..., ‘10’]怎么做?除了循环还可以用一行语句代替循环生成

    list = [str(i).zeffill() for i in range(1,11)]

    1. 生成器:要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator

    g=(x*x for x in range(1,11))

        print(g)

        <generator object <genexpr> at 0x1036ff258>#运行结果

    创建listgenerator的区别仅在于最外层的[]()list的元素我们可以一个个打印出,如果要打印generator中的元素需要借助next方法

    g=(x*x for x in range(1,11))

        print(next(g))

        print(next(g))

        print(next(g))

        print(next(g))

    但是generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。可以通过for循环来迭代它,并且不需要关心StopIteration的错误。

    g=(x*x for x in range(1,11))

        for i in g:

            print(i)

    二、常用内置函数

     

    # print(all([1,2,3,4,5]))#是否可迭代的对象中的所有元素都为真
    # print(any([0,1]))#判断该对象中是否有一个为真
    # print(bin(4))#十进制转二进制  二进制的格式为:0b100->1*2+0*1+0*00b为开头标志
    # print(bool(''))#将一个对象转换为布尔类型,以空格为对象返回的也是True,没什么大用处
    # print(bytearray('abcdefg',encoding='utf-8'))#将字符串转换成byte格式
    # print(bytearray())
    # print(bytearray(12))
    # print(callable('adsf'))#判断该对象是否可被调用,暂时未发现有什么用途
    # print(chr(65))#打印数字对应得ascii  A,换句话就是将数字转化成对应的ascii
    # print(chr(97))#打印数字对应得ascii  a
    # print(ord('m'))#打印字符对应的ascii码值  109
    # print(dict(s='m',m='ss'))#将键值对的格式转换成字典
    # print(dir('sd'))#打印对象可调用的的方法
    # # ###非常实用,当不知道某个对象有哪些方法是可以通过此查看函数
    # print(filter(lambda x:x>5,[12,3,12,2,1,2,35]))#把后面的迭代对象根据前面的方法筛选
    # print(map(lambda x:x>5,[1,2,3,4,5,6]))
    print(random.randint(1,9))#一次性随机取一个数字
    print(random.sample(range(1,9),3))#一次性随机取三个数字
    print(globals())#返回程序中所有的变量
    print(globals())#返回程序内所有的变量,返回的是一个字典
    print(locals())#返回局部变量
    print(hash('aaa'))#把一个字符串哈希成一个数字
    print(hex(111))#数字转成16进制   #16进制格式:0o157
    print(max(111,12))#取最大值
    print(oct(111))#把数字转换成8进制
    print(round(11.11,2))#取几位小数
    print(sorted([2,31,34,6,1,23,4]))#排序
    dic={1:2,3:4,5:6,7:8}
    print(sorted(dic.items()))#按照字典的key排序
    print(sorted(dic.items(),key=lambda x:x[1]))#按照字典的value排序

    __import__('decorator')#导入一个模块

    三、匿名函数

    如果这个函数只执行一次的话,那就可以定义一个匿名函数,匿名函数只能处理比较简单的处理逻辑,只能写简单的表达式,不能写循环 判断,比如三元运算符。

    匿名函数定义使用lambda关键字,比如说要定义一个函数,它的功能是返回两个数相加和,就可以使用lambda,代码如下:

     s = lambda x,y:x+y#冒号号前面的x,y是入参,冒号后面的是返回值

     print(s(1,9))#因为函数即变量,如果没有定一个变量把lambda存起来的话,它就不在内存里,没法执行,所有把它放到s这个变量里面

    四、json处理

    json是一种所有语言中都通用的key-value数据结构的数据类型,很像python中的字典,json处理使用json模块,json模块有下面常用的方法:

    import json    

       dic = {"name":"niuniu","age":18}

       print(json.dumps(dic))#把字典转成json串

       fj = open('a.json','w') 

       print(json.dump(dic,fj))#把字典转换成的json串写到一个文件里面

       s_json = '{"name":"niuniu","age":20,"status":true}'

       print(json.loads(s_json))#把json串转换成字典

       fr = open('b.json','r')

       print(json.load(fr))#从文件中读取json数据,然后转成字典

     五、参数类型

    #可变参数,参数组:*email
    #1.非必填参数,2.没有限制参数个数
    def send_email(*email):
    print(email[0])
    print('af{}'.format(email))
    #print('af%s'%email)
    send_email("123","qeqw","342")

    def run(name,age,*args):
    print(name)
    print(age)
    print('args..',args)
    run('Lin','23','jingjing','beijing','234')

    #位置参数(参数必填);默认参数(非必填);可变参数,(不必填,不限制参数个数);
    #关键字参数 **info
    #1.非必填2.没有限制参数个数3.赋值格式必须为key:value4.返回格式:字典格式
    def hah(name,sex='男',*args,**info):
    print(name)
    print(sex)
    print(args)
    print(info)

    hah(name='sadf;j',age='dsafj',sex='sadf')
    # print('=============11==============')
    # ##hah('sadf;j','女',age='dsafj',sex='sadf')
    # hah('sadf;j',age='dsafj',sex='sadf')
    # print('============22===============')
    # hah('lvlv')
    # print('===========================')
    # hah('sdafas','asdf','sadf')
    #递归:函数内部自己调用自己;必须有一个明确的结束条件,否则循环999次报错
    # def my2():
    # num = input("输入一个偶数:")
    # num= int(num)
    # if num %2 !=0 :
    # print('请输入一个偶数')
    # my2()
    # my2()
  • 相关阅读:
    javascript的字段值,私有变量,静态方法声明
    取得序列中某个点的范围边界
    使用wubi安装ubuntu11.04后无线网卡被禁用无法打开解决办法
    WEB前端性能优化
    jQuery的arrayLike
    在手机上安装BT5系统,没错就是破解无线密码的那个
    PHP在子类方法B调用父类的方法A时,不传参数时仍能得到方法B的名称
    讨厌的文本选区
    PHP遍历解析XML为一个数组
    “软工厂代码生成工具”的学习笔记
  • 原文地址:https://www.cnblogs.com/yunyuan01/p/9270958.html
Copyright © 2011-2022 走看看