词典
可以存储多个元素的对象成为容器,前面提到的list和tuple都属于容器类,这里介绍一个新的容器:词典。
-
基本概念
常见的创建词典的基本方法:dic={'键':值,'键':值,'键':值...}
词典包含两部分,键和值,其中键一般为字符串,也可以为数字或真值(不可变的对象可以作为键)。值可以是任意对象,键和值两者一一对应。
词典特殊的地方是,与表相比,他当中的元素是无序的,因此就不能通过下标来访问元素。词典是通过键来引用的。
构建一个新的空词典:
dic = {}
在词典中添加一个新的元素的方法:
词典元素的循环调用
可以看到最后添加了一个”gcg”但是它却并不在最后一个,也就是在词典里是没有顺序的。-
词典的常用方法
删除其中的某一对:
(说明:del是Python中保留的关键字,用于删除对象。
【 HIGH.__delitem__(键)】等价于【del HIGH[键]】)查询词典中的元素对总数:
文本文件的输入输出
Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读写功能。文本文件的读写主要通过open()所构建的文件对象来实现。
-
创建文件对象
我们打开一个文件,并使用一个对象来表示该文件:对象名 = open(文件名,模式)
最常用的模式有:
- r 打开只读文件,该文件必须存在。
- r+ 打开可读写的文件,该文件必须存在。
- w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
- w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
- a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
- 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
-
文件对象的方法
-
读取
假如文件里已经有这么两行数据: 写入
因为CONTENT是读取的多行数据,其实Python将每一行当做一个元素存储在了一个列表中,因此我们可以将读出来的两行再写在文件之后。
结果:
-
模块
-
引入模块
我们之前看到了函数和对象。从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用。模块(module)也是为了同样的目的。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其它文件中的程序。
我们先创建一个Move.py文件,将它放在和main.py文件同一个目录中,然后在main.py中导入Move.py文件。然后在main.py导入:
引入模块之后,我们可以通过模块.对象的方式来调用模块中的对象,包括函数和全局变量。
Python还有一些其他的有用的导入方式 :
重命名模块名:指定只导入模块中的特定对象,而且可以直接访问,就相当于main.py中的全局对象那样访问:
(因为只是导入了函数move,因此CONTENT是访问不了的。)从模块中导入所有对象,并且可以直接当成全局变量访问:
-
搜索路径
上面的Move.py文件能被main.py文件找到是因为Move.py文件和main.py文件在相同的目录下,那么main.py还能在哪些路径下寻找导入的模块呢?- 程序所在的文件夹
- 操作系统环境变量PYTHONPATH所包含的路径
- 标准库的安装路径(windows系统是在python安装目录中的Lib文件夹中的site-packages目录中,Linux系统是在/usr/local/lib/python2.7/dist-packages中)
-
模块包
模块包顾名思义就是一些模块的集合,它是一个文件夹,我们将上面的Move.py文件放到一个叫module_bag的文件夹中,该文件夹和mian.py在同一个目录中:需要注意的是在文件夹module_bag中必须包含一个__init__.py文件,提醒Python该文件夹为一个模块包,__init__.py可以是一个空文件。
函数的参数传递
一般情况下,我们将参数传递给函数是都是根据函数中参数的位置,一一对应上去的,例如:
这时实参与abc一一对应。
-
关键字传递
为了方便查看,我们写一个函数:
上面是使用默认的位置对应的方法传递的。
有时候觉得根据位置传递过于死板,因此想根据自己方便,按照参数名字来给每个参数传递参数:关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:
-
参数默认值
在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值:看看下面这个例子:
说明:并不是输出2 4 10,因为如果某个参数赋了默认值,则其后面的参数也都必须有默认值,否则就会出错。 -
包裹传递
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
下面看一个例子:
可以看到这个参数是一系列参数的集合,全部都传递给了parameters。两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被parameters收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
其实在parameters前面不加*也可以实现该功能:
可以看到,前面*parameters是Python自动将那一些列参数转化为一个元组赋个parameters,而后面这种方法是我们程序员在传参时认为手动传递一个元组给parameter。通过包裹传递一个字典:
注意到实参中的a b c是不带引号的。 -
解包裹
* 和 **,也可以在调用的时候使用,即解包裹(unpacking),下面为例:相应的,也存在对词典的解包裹,
dict = {'a':1,'b':2,'c':3}
func(**dict) 混合
在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是:先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨
参考资料:
https://www.shiyanlou.com/courses/214/labs/650/document
注:转载请注明原文出处:
作者:CUG_UESTC
出处:http://blog.csdn.net/qq_31192383/article/details/53729331