学习记录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"))  #在字符串里面随机产生一个数字

 

 

 

 

   

 

posted on 2019-06-11 17:15  郭等等  阅读(475)  评论(0编辑  收藏  举报

导航