开发者学堂课程【Python 入门 2020年版: Eval 和 json 的使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10323
Eval 和 json 的使用
内容介绍:
一、 集合的练习
二、 转换相关的方法
一、集合的练习
#有一数据,要求去重排序。这里有两要求,第一是去重,第二是排序。
去重:将一个可迭代对象代入 set,即可去重。
但 set 是无序,要想排序,就在转成 list。取个 x 等于 list。运行,现在数据已有序。
nums =[5,8,7,6,4,1,3,5,1,8,4]
x =list (set ( nums ))
print(x)
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
[1, 3, 4, 5, 6, 7, 8]
Process finished with exit code 0
注意点:现x是集合,现把列表转成了集合,转换后去重。而且还有种情况,如果是数字,将会自动排序。现是集合,集合是不会排序的,故不好用。
nums =[5,8,7,6,4,1,3,5,1,8,4]
x =set ( nums )
print(x)
现 y=list(x),list 是个可迭代对象,x是集合也是一个可迭代对象。将集合转成列表,对列表进行排序。现就是倒序排列的数据。去重,转至 set,在排序,变成有序的,在变成 list。
nums =[5,8,7,6,4,1,3,5,1,8,4]
x =set ( nums )
y = list ( x)
y . sort ( reverse = True )
print ( y )
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
[8, 7, 6, 5, 4, 3, 1]
Process finished with exit code 0
二、转换相关的方法
#内置类 list tuple set (dict)
,都有转换的功能。但 dict 不一样,其他是单个数据,dict 是渐增的数据。现将 nums 是可迭代对象,转换成元组,用tuple,将可迭代对象代入。现 x 等于 tuple,打印 x。就是一个 tuple,就是一个元组。
nums =[9, 8, 4, 3, 2, 1]
x= tuple ( nums )
print ( x )
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
Process finished with exit code 0
现将它变回,但不能变回一样,因为原来的数据是无序的。因为变成 set 就是无序的。再将元组转换成 set,
nums =[9, 8, 4, 3, 2, 1]
x= tuple ( nums )
#使用 tuple 内置类转换成为元组
print ( x )
y = set ( x )
#使用 set 内置类转换成为集合
print ( y )
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
Process finished with exit code 0
将元组转成集合,将列表转成集合,都可以。
nums =[9, 8, 4, 3, 2, 1]
x= tuple ( nums )
#使用 tuple 内置类转换成为元组
print ( x )
y = set ( nums )
#使用 set 内置类转换成为集合
print ( y )
在set里要的是可迭代对象。
def_iand_(self,*args,**kwargs):#real signature unknown
“””Return self&=value,”””
pass
def_init_(self,seq=()):#known special case of set,_init_
“””
Set()->new empty set object
Set(iterable)->new set object
Build an unordered collection of unique elements
#(copied from class doc)
“””
将质点放入:
nums =[9, 8, 4, 3, 2, 1]
x= tuple ( nums )
#使用 tuple 内置类转换成为元组
print ( x )
y = set ( nums )
#使用 set 内置类转换成为集合
print ( y )
z = list ({' name ':' zhangsan ',' age ‘:18,' score ':98})
print ( z )
运行结果:
首先其肯定是个列表,列表里存的都是 k。它们之间可以相互转换。转成元组用tuple,转成集合就用 set 类。转成 list 就用 list 类。C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
[‘name’, ’age’, ’score’]
Process finished with exit code 0
# Python 里有一个比较强大的内置函数 eval,可以执行字符串里的代码 。将字符串转成命令。
a =' input (“请输入您的用户名")'
# a 是一个字符串
print ( a )
运行结果:
直接打印内容。直接将Python里的代码执行。C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
[‘name’, ’age’, ’score’]
input(“请输入您的用户名”)
Process finished with exit code 0
a =' input (“请输入您的用户名")
是符合 Python 的代码。接着将代码执行:
a =' input (“请输入您的用户名")'
# a 是一个字符串
eval(a)
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
[‘name’, ’age’, ’score’]
请输入您的用户名
Process finished with exit code 0
a =' input (“请输入您的用户名")'
# a 是一个字符串
b=’1+1’
print(b)
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
[‘name’, ’age’, ’score’]
1+1
Process finished with exit code 0
1+1的和为:
a =' input (“请输入您的用户名")'
# a 是一个字符串
b=’1+1’
print(eval(b))
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
(9, 8, 4, 3, 2, 1)
{1,2, 3, 4, 5, 8, 9}
[‘name’, ’age’, ’score’]
2
Process finished with exit code 0
转 int 是用 int。例如:
c=’100’
int(c)
eval 可以执行字符串里的代码。
JSON(JavaScriptObjectNotation, JS 对象简谱)是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON 本质是一个字符串
JSON 的功能强大,使用场景也非常的广,目前我们只介绍如何使用 Python 的内置 JSON 模块,实现字典、列表或者元组与字符串之间的相互转换。
使用 json 的 dumps 方法,可以将字典、列表或者元组转换成为字符串。
前后端交互,前端 JS,姓名,年龄,性别,在浏览器填完后将数据发给后台的服务器,服务器将数据在写入数据库。
历史:早期前端用的是 JS ,后端用的是 Python。这两者数据类型不相通。
在 Python 里,数据叫做字典。在JS里叫做对象。传递数据最简单的是传字符串。
将字符串按一定的编码格式传入。因为不管是什么语言 JS、Python……,都认识字符串或者文本。所以最开始传的是文本,文字要根据 int 的规范来写。传图像的方法很多,传图像直接传地址,通过地址访问,很少传内容。
将文字传入服务器,传过来后,根据一定的格式就是文本内容,所以叫做 XML。 XML 里东西太多,name 有开始也有结束,最好的方法就是有一个 name。同样的信息,用最少的信息表示最好,所以就出现的 JSON。
JSON 本质是字符串不是字典,伪装成字典的格式,里面的是字符串。JSON 里的字符串只能用双引号,不能用单引号。
import json
# JSON 的使用,把列表、元组、字典等转换成为 JSON 字符串
person ={' name ':' zhangsan ',' age ':18,' gender ':' female '}
#字典如果想要把它传给前端页面或者把字典写入到一个文件里。比如将字典数据写入文件 infor.txt 里,也要将‘’name ':' zhangsan ',' age ':18,' gender ':' female‘
变成字符串,18 可以加可以不加,因为 18 是数字,JSON 能识别。
’#'{" name ":" zhangsan "," age ":18," gender ":" female "}'
m = json . dumps ( person )
# dumps 将字典、列表、集合、元组等转换成为 JSON 字符串
print ( m )
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
2
{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0
注意:{" name ":" zhangsan "," age ":18," gender ":" female "}
不再是字典:
# JSON 的使用,把列表、元组、字典等转换成为 JSON 字符串
person ={' name ':' zhangsan ',' age ':18,' gender ':' female '}
#字典如果想要把它传给前端页面或者把字典写入到一个文件里。
’#'{" name ":" zhangsan "," age ":18," gender ":" female "}'
m = json . dumps ( person )
# dumps 将字典、列表、集合、元组等转换成为 JSON 字符串
print ( m ) #'{" name ":" zhangsan "," age ":18," gender ":" female "}'
print ( type ( m ))#
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0
所以m是字符串。JSON 本质是字符串。
#print ( m [' name '])
不能这样使用, m 是一个字符串,不能再像字典一样根据 key 获取 value
比如:现将字符串变成字典
n ='{" name ":" Lisi "," age ":20," gender ":" male "}'
p = eval( n )
print ( p )
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{" name ":" zhangsan "," age ":18," gender ":" female "}
{‘ name ‘:’Lisi ‘,’ age ‘:20,’ gender ‘:’male ‘}
Process finished with exit code 0
接着打印 type(p),也能变成字典,使用 eval 也能将字符串转成字典:
n ='{" name ":" Lisi "," age ":20," gender ":" male "}'
p = eval( n )
print (type( p ))
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0
n ='{" name ":" Lisi "," age ":20," gender ":" male "}'
#p = eval( n )
#print (type( p ))
s=json.loads(n)#loads
可以讲 json 字符串转换成为 Python 里的数据
print(s)
print(type(s))
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0
如果是列表也能变成列表:
n=’[“hello”,”good”]’
s=json.loads(n)
print(s)
print(type(s))
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
[‘hello’,’good’]
Process finished with exit code 0
# Python
JSON
#字符串 字符串(比如 name 是一个字符串,转换成 JSON 是一个字符串)
#字典 对象(比如是字典,转换成 JSON 是对象)
#列表、元组、 数组
比如:
print ( json . dumps ([' hello ',' good ',' yes ' ]))
(集合)
print ( json . dumps ((' hello ',' good ',' yes ' )))
(元组)
print ( json . dumps ({' hello ',' good ',' yes ' }))
( set )
打印结果:File "C:\Users\chris \AppData\Local\Programs Python\Python37\lib\ison\encoder.py", line 257,in iterencode
return_ iterencode(o, 0)
File "C:\Users\chris\AppData\Local\Programs Python\Python37\lib\json\encoder .py", line 179, in default
raise TypeError(f'object of type {o._ classname}
TypeError: Object of type set is not JSON serializable
{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes"]
["hello", "good", "yes"]
Process finished with exit code 1
注意集合不能转。
print ( json . dumps ([' hello ',' good ',' yes ' ]))
(集合)
print ( json . dumps ((' hello ',' good ',' yes ' )))
(元组)
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes"]
["hello", "good", "yes"]
Process finished with exit code 0
转换成JSON长相都是一模一样,["hello", "good", "yes"] 在 JSON 里叫数组。并不是所有的都能转。
# Python JSON
#Ture ture
#False false
#字符串 字符串
#字典 对象
#列表、元组、 数组
比如写个布尔值,将它转成JSON:
print ( json . dumps ([' hello ',' good ',' yes ',True ]))
print ( json . dumps ((' hello ',' good ',' yes ' ,False)))
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes",true]
["hello", "good", "yes",false]
Process finished with exit code 0
JSON 也有对应的数据类型。注意:JSON 里的数组转回来,变成 Python 里的列表。
n=’[“hello”,”good”]’
s=json.loads(n)
print(s)
运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数
[‘hello’,’good’]
Process finished with exit code 0