学习记录003-json/切片/函数
关于进行文件读取的时候的.flush方法:
数据处理完了都是从内存写到磁盘,但是由于用户频繁和磁盘有交互,内存有缓冲区,所以这样的情况下就是内存写满之后再往次磁盘放,导致用户和磁盘之间频繁的交互不会实时输出看到,所以可以使用文件的.flush方法=====》文件.flush()
【json】
文件里面存放的都是字符串
json串只能由双引号构成,这也是区分和字典的外在显示
json文件就是字符串,那么如何操作字典转化成json/字符串,从而写进文件呢?
# 下面这个是字典 d = { "姓名":"郭等等", "age":26, "颜色":"蓝色", "喜欢的运动":"跑步" } # 知识点:字典转化成字符串然后写进文件,因为文件里面只存字符串 import json with open("abc.json","w",encoding="utf-8") as fw: #如果为了文件的颜色渲染,文件结尾为json格式就好了 # s = json.dumps(d,ensure_ascii=False,indent=4) #把字典转成json字符串,如果字典里面有中文需要转换/需要缩进,字典后面加方法 # fw.write(s) json.dump(d,fw,ensure_ascii=False,indent=4) #这个方法也可以操作字典转化成字符串
其中的【ensure_ascii=False】方法是为了解析字典里面的中文,不至于写进文件有乱码;而indent=4的作用是:假如字典长度过长,那么写进文件就是一行,为了查看方便使用该方法,他的作用是写进文件字典有4个缩进空格
那么操作文件的字符串转化成字典呢?
# 知识点:字符串转成字典 with open("abc.text",encoding="utf-8") as fw: # result = fw.read() # dic = json.loads(result) #字符串转成字典 # print(type(dic)) result = json.load(fw) #这个方法也可以操作字符串转化成字典 print(result)
【切片】
理解:
切片就是对List一个范围的取值,也就是List取值的一个方式
进行循环List的时候,不要删除List里面的元素,不然会造成下标错乱
切片的取值原则是:内容顾头不顾尾
#下面是个List list = ["name","age","id","class"] print(list[1:]) #切片取得内容顾头不顾尾 # [0:2]:结果为前两位元素 # [:] 结果为列表所有元素 # [1:] 结果为第一位元素至最后
关于查看列表的内存地址:
print(id(List))
根据内存地址引申出两个概念:深拷贝和浅拷贝
如果两个列表内存地址一致的话,那么就会造成如果进行其中一个列表元素的修改,另外一个列表的元素也会有影响,这就叫做浅拷贝
# 浅拷贝:两个列表内存地址id一致的情况,进行操作其中一个列表,另外一个列表也会有影响,则这种叫做浅拷贝 # stus = ["guo","ya","nan"] # stus2 = stus # stus.append("deng") # print(stus2) # stus2.remove("guo") # print(stus)
深拷贝的概念是进行其中一个列表元素的修改,另一个列表的元素不会有影响:
# import copy # stus = ["guo","ya","nan"] # stus2 = stus[:] # stus = copy.deepcopy(stus)
对范围内的取值:计算间隔数的时候可以把间隔数减1计算取值:
List = [1,2,3,4,5,6,7,8,9,10] #这是一个列表 print(List[0:10:3]) #进行范围内的取值:0和10分别代表取值元素范围的开始和结束,3代表在这个范围内间隔几个进行取值, 计算间隔数的时候可以把间隔数减1,比如这个List输出为:[1,4,7,10]
备注:只要可以通过下标进行取值的都可以使用切片,比如list,元组,字符串,字典不可以,因为字典不可以通过下标取值
【非空即真,非零即真】
( 1 )非空即真=====>空的就是假的,只要不是空的就是真的
# name = input('请输入名称:').strip() #name =''(空字典、空字符串、空元组都算空) # a= '' # b=[] # c={} # d=None # if name: # print('输入正确') # else: # print('name 不能为空') #如果是空的,就走else,如果不是空的,就走if
( 2 )非零即真=====>零就是假的,只要不是零就是真的
# name1 = input('请输入名称:').strip() # name1 = int(name1) # if name1: # print('输入正确') # else: # print('name 不能为空')
【列表生成式】
result = [str(i).zfill(2) for i in range(1,10)if i < 8] print(result) 分为操作区域,循环区域,条件判断;首先执行循环,随后是判断,最后是操作
【三元表达式】
# 三元表达式:先写结果随后进行if else条件判断 # 判断身份证倒数第二位是偶数or奇数,如果是后者就是男性 # 第一种写法: # card_id = "130923199301206123" # if int(card_id[-2])%2 ==0: # print("你是个女生") # else: # print("你是个男生") # 第二种写法: # sex = "你是个女生" if int(card_id[-2])%2 ==0 else "你是个男生" # print(sex)
【集合】
集合有去重的属性,比如List = [1,1,2,3,4,5,5] 查看输出:
List = [1,1,2,3,4,5,5] print(set(List)) # 输出:{1, 2, 3, 4, 5}
定义空集合/添加元素/删除元素
# 定义空集合 s= set() # 集合添加元素 s.add(1) print(s) # 集合删除元素 s.remove(1) print(s)
交集/并集/差集:对称差集,一般差集
# 交集:两个集合里面都有的元素 # l1 = ["郭等等","刘钊","韩梅梅","测试"] # l2 = ["郭等等","测试","齐磊","李雷"] # 找两个集合的交集有哪些元素 # xingneng = set(l1) # zidonghua = set(l2) # print(xingneng.intersection(zidonghua)) 方法001 # print(xingneng & zidonghua) 方法002 # 并集:俩集合添加到一起的元素,但是没有重复 # l1 = ["郭等等","刘钊","韩梅梅","测试"] # l2 = ["郭等等","测试","齐磊","李雷"] # xingneng = set(l1) # zidonghua = set(l2) # print(xingneng.union(zidonghua)) # 差集:第一个集合里面减去两个集合的交集元素,剩余的元素输出为差集 # l1 = ["郭等等","刘钊","韩梅梅","测试"] # l2 = ["郭等等","测试","齐磊","李雷"] # xingneng = set(l1) # zidonghua = set(l2) # print(xingneng.difference(zidonghua)) # 一般差集:把两个集合里面的交集都去除 # l1 = ["郭等等","刘钊","韩梅梅","测试"] # l2 = ["郭等等","测试","齐磊","李雷"] # xingneng = set(l1) # zidonghua = set(l2) # print(xingneng.symmetric_difference(zidonghua)) # 对称差集 # print(xingneng ^ zidonghua)
【函数】important
定义函数:函数里面包含的主要是实现的功能;一个函数里面尽量只有一个功能,避免代码长度过长
注意:函数名称最好见名知意
关于函数的变量:在一个函数里面定义的变量,出了函数就不能用了
关于“return”:定义函数的时候需要想清楚是否需要返回值,如果需要,在函数里面需要用return来接收返回值;在一个函数里面如果遇见return,函数立即结束
定义函数
def Login(): print("请输入用户名字:") Login()
函数的返回值
def jiafa(a,b): result = a + b return result #拿到返回值 sum = jiafa(1,1) print(sum)
默认参数值:如果在形参上给定参数默认值,那么实参里面如果不加值就会默认赋予一开始的形参值
# 默认值参数(那么调用的时候该参数不是必须填写项) # def register(name,age=27): # print("%s,%s写入数据库"%(name,age)) # register("郭等等") # register("李雷","23")
【random模块】import random
===>random.randint() 在某个范围内随机取整数
===>random.sample("这里是字符串,这里是字符串,这里是字符串",数字) 进行字符串几位数字的取值,输出的是一个List,可转化成字符串
# random_list = random.sample("abcdsghjkjj",3) # print("".join(random_list))
===>random.shuffle() 进行List的洗牌
# 进行list的洗牌 # list = [1,2,3,4] # print(random.shuffle(list)) # print(list)
【string模块】import string
import string # print(string.digits) #所有的整数 # print(string.ascii_lowercase) #所有的小写字母 # print(string.ascii_uppercase) #所有的大写字母 # print(string.ascii_letters) #所有的小写和大写字母 # print(string.punctuation) #所有的特殊负号 # print(random.uniform(1,9)) #随机产生一个小数 # print(random.choice("12345678")) #在字符串里面随机产生一个数字