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='汉中')#报错,必填参数没填

 

原文地址:https://www.cnblogs.com/emilyliu/p/8884185.html