首页 > 学院 > 开发设计 > 正文

Python 语法摘要1

2019-11-14 11:32:24
字体:
来源:转载
供稿:网友

一、词典

  列表是Python里的一个类。一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象。我们可以调用这个对象的一些方法,比如 nl.append(15)。 我们要介绍一个新的类,词典 (dictionary)。与列表相似,词典也可以储存多个元素。这种储存多个元素的对象称为容器(container)。

基本概念

常见的创建词典的方法:

>>>dic = {'tom':11, 'sam':57,'lily':100}>>>PRint type(dic)

词典元素的循环调用

>>>dic = {'lilei': 90, 'lily': 100, 'sam': 57, 'tom': 90}>>>for key in dic:   print dic[key]

词典的常用方法

>>>print dic.keys() # 返回dic所有的键>>>print dic.values() # 返回dic所有的值>>>print dic.items() # 返回dic所有的元素(键值对)>>>dic.clear()

另外有一个很常用的用法:

>>>del dic['tom'] # 删除 dic 的‘tom’元素

del是Python中保留的关键字,用于删除对象。

与表类似,你可以用len()查询词典中的元素总数。

>>>print len(dic)

二、文本文件的输入输出

  Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读写功能。 文本文件的读写主要通过open()所构建的文件对象来实现。

创建文件对象

我们打开一个文件,并使用一个对象来表示该文件: 对象名 = open(文件名,模式) 最常用的模式有:

r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

文件对象的方法

读取:

content = f.read(N) # 读取N bytes的数据content = f.readline() # 读取一行content = f.readlines() # 读取所有行,储存在列表中,每个元素是一行。

写入:

f.write('I like apple!/n') # 将'I like apple'写入文件并换行

关闭文件:

f.close() # 不要忘记关闭文件

三、模块

  我们之前看到了函数和对象。从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用。

模块(module)也是为了同样的目的。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其它文件中的程序。

引入模块

我们先写一个first.py文件,内容如下:

def laugh(): print 'HaHaHaHa'

再写一个second.py,并引入first中的程序:

import first #将first文件引入for i in range(10): first.laugh()

在second.py中,我们使用了first.py中定义的laugh()函数。

引入模块后,可以通过 模块.对象 的方式来调用引入模块中的某个对象。上面例子中,first为引入的模块,laugh()是我们所引入的对象。Python中还有其它的引入方式:

import a as b # 引入模块a,并将模块a重命名为b  from a import function1 # 从模块a中引入function1对象。调用a中对象时,我们不用再说明模块,即直接使用function1,而不是a.function1。 from a import * # 从模块a中引入所有对象。调用a中对象时,我们不用再说明模块,即直接使用对象,而不是a.对象。这些引用方式,可以方便后面的程序书写。

搜索路径

Python会在以下路径中搜索它想要寻找的模块:

程序所在的文件夹
操作系统环境变量PYTHONPATH所包含的路径
标准库的安装路径

如果你有自定义的模块,或者下载的模块,可以根据情况放在相应的路径,以便Python可以找到。

模块包

可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。通过

import this_dir.module

引入this_dir文件夹中的module模块。 该文件夹中必须包含一个 __init__.py 的文件,提醒Python,该文件夹为一个模块包。__init__.py 可以是一个空文件。

四、函数的参数传递

包裹传递

在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。

下面是包裹位置传递的例子:

def func(*name): print type(name) print namefunc(1,4,6)func(5,6,7,1,2,3)

两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。 为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。

下面是包裹关键字传递的例子:

def func(**dict): print type(dict) print dictfunc(a=1,b=9)func(m=2,n=1,c=11)

与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加 * *。 包裹传递的关键在于定义函数时,在相应元组或字典前加 * 或 * * 。

解包裹

* 和 **,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:

def func(a,b,c): print a,b,cargs = (1,3,4)func(*args)

在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用 * ,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有 * 会是什么后果?) 相应的,也存在对词典的解包裹,使用相同的func定义,然后:

dict = {'a':1,'b':2,'c':3}func(**dict)

在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表