zoukankan      html  css  js  c++  java
  • 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='汉中')#报错,必填参数没填

     

  • 相关阅读:
    Host文件修改后无效的解决办法
    spring-framework-reference阅读笔记(一)
    利用instsrv和srvany来手动安装服务
    JSP
    DHTML (一)
    Java 多线程 (概述)
    Java IO (三)
    Java IO(二)
    Java 递归
    Java IO File (一)
  • 原文地址:https://www.cnblogs.com/emilyliu/p/8884185.html
Copyright © 2011-2022 走看看