• Python学习(十五)json串使用,不固定参数,关键词参数


    1、json串

     json串是一字符串

    import json
    f=open('product.json',encoding='utf-8') #读json串文件
    res=f.read()
    print(res)

    2、json.loads使用

    import json
    f=open('product.json',encoding='utf-8')
    res=f.read()
    product_dic=json.loads(res) #把json串,变成python的数据类型(字典)
    print(type(product_dic))
    print(product_dic)

    输出的类型是字典类型

    3、json.load使用

    import json
    
    f=open('product.json',encoding='utf-8')
    product_dic=json.load(f)#用load就不用先读文件一次,就可以转成Python的数据类型
    print(type(product_dic))
    print(product_dic)

    与loads相比,load方法可以不用先读一次文件,再进行转换,可以直接转换

    4、json.dumps使用

    将字典转换为json字符串,间隔4,写入文件中

    d={
        'zll':{
            'addr':'北京',
            'age':28
        },
        'ljj':{
            'addr':'北京',
            'age':38
        }
    }
    fw=open('userinfo.json','w',encoding='utf-8')
    dic_json=json.dumps(d,ensure_ascii=False,indent=4)#字典转成json字符串
    fw.write(dic_json)

    5、json.dump使用

    d={
        'zll':{
            'addr':'北京',
            'age':28
        },
        'ljj':{
            'addr':'北京',
            'age':38
        }
    }
    fw=open('userinfo.json','w',encoding='utf-8')
    json.dump(d,fw,ensure_ascii=False,indent=2)#用dump就可以直接写

    6、json串使用

    def op_data(filename,dic=None):
        if dic:
            with open(filename,'w',encoding='utf-8')as fw:
                json.dump(dic,fw,ensure_ascii=False,indent=4)
        else:
            with open(filename, 'r', encoding='utf-8')as fr:
               return json.load(fr)
    
    filename='userinfo.json'
    all_users=op_data(filename)
    print(all_users)

    如果dic没数据就将文件中的json串变为字典并返回;如果dic有数据就将dic转换为json格式并写入文件。
    该函数使用如下:

    def op_data(filename,dic=None):
        if dic:
            with open(filename,'w',encoding='utf-8')as fw:
                json.dump(dic,fw,ensure_ascii=False,indent=4)
        else:
            with open(filename, 'r', encoding='utf-8')as fr:
               return json.load(fr)
    filename='userinfo.json'
    all_users=op_data(filename)
    
    
    for i in range(3):
        choice=input('输入 1,注册,2 删除')
        if choice=='1':
            username=input('账户')
            pwd=input('密码')
            if username not in all_users:
                all_users[username]=pwd
                op_data(filename,all_users) #使用函数
        elif choice=='2':
                username=input('账户')
                all_users.pop(username)
                op_data(filename,all_users)#使用函数

    输入1则进行注册,注册时输入账号密码,并将账号密码存进字典,使用函数,将该字典写入文件;输入2则进行删除,输入账号进行删除,将删除后的字典写入文件

    7、函数不固定参数

    函数不固定参数,是非必填参数,不限制参数个数,结果是放到元组里面

    def syz(*args):
        print(args)
    syz()
    syz('liujia ','dewe',324)
    syz('2e','2asd')

    以上三个调用函数都可以成功,并且打印出来的内容是放在元组里面的

    但是下面这段代码,其实在函数中已经规定了要有三个参数,所以调用函数输入参数不是3个就会报错了

    def syz(*args):
       username=args[0]
       pwd=args[1]
       age=args[2]
       print(args)
    syz()  #报错
    syz('liujia ','dewe',324)
    syz('2e','2asd')#报错

    8、关键词参数

    关键词参数是非必填参数,不限制参数个数,传参需要按照一定格式,结果放在字典里

    def syz2(**kwargs):
        print(kwargs)
    syz2()
    syz2(name='liujia',age=22)
    syz2(name='liujia',age=12,addr='成都',home='汉中')

    传参要按照key-value形式传,以上三种调用函数方式都可以,打印出来是字典格式

    以下这种调用会报错,因为传参的格式不对

    def syz2(**kwargs):
        print(kwargs)
    syz2('liujia')

    9、必填参数与关键词参数同时使用

    def syz2(time,**kwargs):
        print(kwargs)
    syz2(name='liujia',age=22,time='asd') 
    syz2('liujia') 

    time是必填参数,所以调用函数时,必须要传参,以上两种方式都可以

    以下几种方式就会报错

    def syz2(time,**kwargs):
        print(kwargs)
    syz2()#报错,必填参数没填
    syz2(name='liujia',age=12,addr='成都',home='汉中')#报错,必填参数没填

     

  • 相关阅读:
    ArrayList和LinkedList的区别
    线程的基本概念、线程的基本状态以及状态之间的关 系
    当一个线程进入一个对象的一个synchronized方法后, 其它线程是否可进入此对象的其它方法?
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.thinkplatform.dao.UserLogDao' available: expected at least 1 bean which qualifies as autowi
    IDEA设置热部署
    spring的核心组件及作用(一)
    解决Linux启动redis时出现提示权限不够问题
    Struts自动装配和四种放入Session作用域的方式
    Struts第一个案例搭建
    当List<String> list =new ArrayList<String>(20); 他会扩容多少次
  • 原文地址:https://www.cnblogs.com/emilyliu/p/8884185.html
Copyright © 2020-2023  润新知