python3.8 json.dump 写不进文件--global关键字失效
2021/7/28 22:06:14
本文主要是介绍python3.8 json.dump 写不进文件--global关键字失效,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目场景:
一个简单的本地学生信息管理系统, 使用python的json模块将学生信息数据保存到本地
问题描述:
在 储学生信息 到本地的时候需要将全局变量引入save_user 函数体内,但是引入没有起效果,全局遍量students为[]
但是在问题函数下面一个函数 load_users 内就可以引入成功
global students
# 存储学生信息 def save_user(): global students print(students) # [] with open(FILE_PATH, 'w', encoding='utf-8') as file: # ensure_ascii=False 这个设置的是在json文件中显示汉字不是以unicode编码形式显示的 而是汉字本身 json.dump(STUDENTS, file, ensure_ascii=False) # file.write(json.dumps(students, indent=4)) # 加载学生信息 def load_users(): global students # [{'aa':112,'asa':ass},{},{}] # 文件不存在 或者 文件存在 但是没有数据 就表示没有存储过 if not os.path.exists(FILE_PATH) or os.path.getsize(FILE_PATH) == 0: students = [] else: with open(FILE_PATH, 'r', encoding='utf-8') as file: students = json.load(file) # 之前有存储 字典得赋予原来注册的那些用户
有图有真相:
原因分析:
经过几个小时查找资料, 我未找到具体因为什么,据说跟global关键字的 局限性有关,但是还没有学习到这个知识点
解决方案:
下面分享两种解决方案
方案1
方法: 使用全大写字母代替小写字母的全局遍量
原理: python中 称变量名英文字母全部是大写的 这种格式的数据成为常量 就不允许变化了, 而常量是默认导入全部函数内,跨过global问题
import json # python中 称变量名英文字母全部是大写的 这种格式的数据成为常量 就不允许变化了 STUDENTS = [] # 存储学生信息 def save_user(): with open(FILE_PATH, 'w', encoding='utf-8') as file: # ensure_ascii=False 这个设置的是在json文件中显示汉字不是以unicode编码形式显示的 而是汉字本身 json.dump(STUDENTS, file, ensure_ascii=False) # file.write(json.dumps(students, indent=4))
问题: 代码需要改变常量这不好!
方案2 (推荐)
方法: 使用函数的参数, 以传值的方式引入变量
原理: 利用函数的形参等参数传值将要保存的数据传递给方法体, 跨过global的问题, 最简单而有效也安全
# 存储学生信息 def save_user(student_list): # global students 大写就可以全局,小写就不可以全局,下面都可以全局,这里就是为[],????? with open(FILE_PATH, 'w', encoding='utf-8') as file: # ensure_ascii=False 这个设置的是在json文件中显示汉字不是以unicode编码形式显示的 而是汉字本身 json.dump(student_list, file, ensure_ascii=False) # file.write(json.dumps(students, indent=4)) save_user(students)
问题:给全局遍量传值,稍微有点傻…
这篇关于python3.8 json.dump 写不进文件--global关键字失效的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略