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. 使用FormData进行Ajax请求上传文件

    Servlet3.0开始提供了一系列的注解来配置Servlet.Filter.Listener等等.这种方式可以极大的简化在开发中大量的xml的配置.从这个版本开始,web.xml可以不再需要,使用相 ...

  2. ajax调用WebService实现数据库操作

    首先说下测试环境和思路: 前端收集数据转换成json格式传输到后端,处理并存入数据库 1.数据库操作: [WebMethod] public string InsertPoint(string dat ...

  3. TestFlight的使用--再也不用担心环境打错了

    转赞请注明出处:http://www.cnblogs.com/zhanggui/p/7039651.html 一.前言 在iOS开发过程中,难免会遇到各种Bug.因此你会去解决所有的Bug,然后提交到 ...

  4. 数据结构【查找】—平衡二叉树AVL

    /*自己看了半天也没看懂代码,下次再补充说明*/ 解释: 平衡二叉树(Self-Balancing Binary Search Tree 或Height-Balanced Binary Search ...

  5. UDP Health Checks

    This chapter describes how to configure different types of health checks for UDP servers in a load-b ...

  6. [docker][win10]安装的坑

    右键这个小图标,先signin,注意这里是ID 不是邮箱   image.png 可能starting 时候就报错说 “Containers feature is not enabled” 或者   ...

  7. 本地项目上传到CODING

    1.在Coding上添加项目 1).新建项目 README:一般项目中都会添加一个README文件对项目进行概述,以便一目了然地知道这个项目是做什么用的,如何使用等信息.README文件采用markd ...

  8. WPF窗体の投影效果

    有时候我们需要给WPF窗体加上一个毛边(投影效果) 我们可以在窗体下加上如下代码 <Window.Effect> <DropShadowEffect BlurRadius=" ...

  9. Linux 27 岁了!盘点 Linux 的 27 件趣事

    Linux 27 岁了!盘点 Linux 的 27 件趣事 许多人认为10月5日是 Linux 系统的周年纪念日,因为这是 Linux 在1991年首次对外公布的时间.不过,你可能不知道的是,早在19 ...

  10. Android中实现短信发送的一种方式

    SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...