import json
2 def greet_user(filename):
3 try:
4 with open(filename) as f_obj:
5 username = json.load(f_obj)
6 except FileNotFoundError:
7 username = input("what is your name?")
8 with open(filename,'w') as f_obj:
9 json.dump(username,f_obj)
10 print("we'll remember you when you come back, "+username+"!")
11 else:
12 print("hello,"+username+".;")
13
14 greet_user("username.json")

这段代码1描述了这样一个功能,打开“username.json”文件夹,该文件夹中存储了用户姓名,如果不存在该文件夹,可以创建该文件夹,并且这里创建了一个函数来描述这件事情:

该代码段实际上完成了两个功能:1 读取"username.json"文件夹。2 创建“username.json”文件。

实际上,在代码设计的时候,我们通常应该具有这样的思想:将我们要做的工作,划分为具体的代码函数块,使得函数看起来更加简洁,扩展性也越强,在编写程序的时候,我们应该具备这样的意识。

下面,将上述的的代码拆成两部分功能,代码2如下:


1 import json


2 def get_stored_username():


3     filename = "username.json"


4     try:


5         with open(filename) as f_obj:


6             username = json.load(f_obj)


7     except FileNotFoundError:


8         return None


9     else:


10         return username


11


12 def greet_user():


13     username = get_stored_username()


14     if username:


15         print("hello,"+username+".")


16     else:


17         username = input("what is your name?")


18         filename = "username.json"


19         with open(filename,"w") as f_obj:


20             json.dump(username,f_obj)


21             print("we'll remember you when you come back, "+username+"!")


22 greet_user()


上述代码完成了函数1的功能。但是函数的耦合程度降低了,因此,写代码的时候,需要注意自己的代码风格,尽量养成低耦合代码的习惯。

在此,总结一下上述代码中的一些知识点:

1 json模块非常好用,首先明确一个重要的概念:json是一种数据交换格式,即本质是数据格式的转换, 这种格式方便我们信息。

2 json.dump()用于将Python对象编码成json字符串

3 json.load()将json格式转化成python对象

将上述2抽象一下,变成我们将我们Python中的比如字符串,整型数,字典,列表,这些存储在一个文件在.json的文件类型中

将3抽象一下,变成,将.json类型的文件加载成字符串,整型数等等。

如果不考虑数据的本质,我们可以认为,这就是简单的写文件和读文件的操作

4 代码2中的第八的return None,None是一个关键字(姑且这么叫),我们再看代码2中第十四行代码 if username,可以发现,可以感觉username,None来判断逻辑值,实际上:

python 中,None,空列表[],空字典{},空元组(),0都一系列代码空和无的对象都会被转化成Flase,其他表示1,真,有的对象被转化成True

5 代码2中的第10行代码,表示Python中的函数返回值类型可以是任意你想要的值,包括数值,字符串,列表,字典等,因此在写函数的时候,要注意灵活使用。

Python学习第十八篇——低耦合函数设计思想的更多相关文章

  1. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  2. Python学习第十五篇——类继承和类实例化

    学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...

  3. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

  4. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  5. python【第十八篇】Django基础

    1.什么是Django? Django是一个Python写成的开源Web应用框架.python流行的web框架还有很多,如tornado.flask.web.py等.django采用了MVC的框架模式 ...

  6. Python 学习 第十六篇:networkx

    networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...

  7. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  8. Python 学习 第十四篇:命名元组

    Python的元组不能为元组内部的数据进行命名,而 collections.namedtuple 可以来构造一个含有字段名称的元组类,命名元组可以通过逗号+字段名来获取元素值: collections ...

  9. Python 学习 第十二篇:pandas

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame,Series类似于numpy中的一维数组,类似于关 ...

随机推荐

  1. python第一百六十九天,第十九周作业

    FIRSTCRM 学员管理开发需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成绩按课程分别统计 3.每个班级至少包含一个或多个讲师 4.一个学员要有状态转化的过程 ,比如未报 ...

  2. python第一百零八天---Django 3 session 操作

    上节内容回顾: 1.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? Form表单提交: 提交 -> url > 函数或类中的方法 - .... Ht ...

  3. c/c++ 深拷贝

    解决上一篇浅拷贝的问题 浅拷贝的问题根源是,类里有指针类型的成员变量,所以需要自己编写拷贝构造函数和重载=函数 #include <iostream> #include <strin ...

  4. lua table排序报错与解决

    lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...

  5. 【PAT】B1009 说反话

    在输入时直接分别将每个单词放入字符串,逆序输出字符串数组 #include<stdio.h> int main(){ int num=0; char ans[90][90]; while( ...

  6. Java的基础知识四

    一.Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基 ...

  7. June 5. 2018 Week 23rd Tuesday

    Learn to let go and be clear of where you really want to head for. 学会放手,同时也要弄清楚自己的真正所爱. From Kissing ...

  8. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  9. eshint的配置

    { "strict" : "implied", //文件里面使用"use strict" "undef" : true, ...

  10. c# 反射 去掉对象中字符串属性多余空格