文件操作
我们先来模拟一个登陆页面,当三次输入错误后则加锁。
此时若再次执行程序,会发现无法执行,且程序所在工程中产生了一个lock.log文件。
生成文件对象
python中使用open函数生成文件对象。
fileobject = open(filename,mode)
filename:文件路径
mode:对文件的操作
文件对象方法
String = FileObjext.readline([size])
每次读取文件的一行
size:是指每行每次读取size个字节,直到行的末尾
List = FileObject.readlines([size])
多行读,返回一个列表
size:每次读入size个字符,然后继续按size读,而不是每次读入行的size个字符。
String = FileObject.read([size])
读出文件的多用内容,并复制给一个字符串
size:读出文件的前【size】个字符,并输出给字符串,此时文件的指针指向size处。
FileObject.next()
返回当前行,并将指针指向下一行
FileObject.write(string)
FileObject.writelines(List)
write和writelines在写入数据前是否清除文件中原来所有的数据,再重新写入新的内容,取决于打开文件的模式。
FileObject.seek(偏移量,选项)
(1)选项=0时,表示将文件指针指向从文件头部到“偏移量”字节处
(2)选项=1时,表示将文件指针指向从文件的当前位置,向后移动“偏移量”字节
(3)选项=2时,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节。
FileObject.flush()
提交更新
FileObject.close()
关闭打开的文件对象,每次调用都需要使用
f = open('first.txt','r')
f.read()
f.close()
如果考虑到异常处理的情况,我们通常用以下方式打开一个文件:
with open('file') as f:
s = f.read()
自定义函数
def functionName(parameter1,parameter2):
“” ”注释”””
statement1
statment2
return valueToReturn
我们来用函数写一个猜数字的小游戏:
函数返回值:
(1)函数被调用后悔返回一个指定的值
(2)函数调用后默认返回None
(3)return 返回值
(4)返回值可以是任意类型
(5)return执行后,函数终止
(6)区分返回值和输出
和C++相同,在函数体内定义的变量是局部变量,它的改变不会引起这个变量值的改变。python中,声明一个全局变量必须加上global关键字。
列表和字典也可以作为函数参数进行传递
参数冗余处理
通常情况下,当我们调用函数时的实参个数大于形参个数时,会出现报错的现象,但如果在定义函数时做特殊处理,则不会报错。
在定义函数时多传入一个*arg,则实参中冗余的参数都会被写入arg中。
但如果是在指定默认参数的情况下呢?
我们需要再加入一个接收字典类型的形参。
内置函数:
有很多函数python已经为我们提供了,我们不需要每一个函数都自己去完成。
python中的内置函数:
http://www.runoob.com/python/python-built-in-functions.html
匿名函数—lambda
lambda函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方。
lambda函数的特点:
(1)使用python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
(2)对于一些抽象的,不会在别的地方再复用的函数,有时候给函数起个名字也是难题,使用lambda不需要考虑命名的问题
(3)使用lambda在某些时候让代码更容易理解
lambda应用实例:
reduce为主次操作list里的每项,接收的参数为两个,最后返回的为一个结果。
使用lambda匿名函数就不需要再先定义一个myadd函数,可直接按照下面的代码计算:
序列处理函数:
filter(function, iterable)
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,python2中返回的是过滤后的列表, 而python3中返回到是一个filter类
filter类实现了iter和next方法, 可以看成是一个迭代器, 有惰性运算的特性, 相对python2提升了性能, 可以节约内存.
zip()
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
map()
map() 会根据提供的函数对指定序列做映射。
map(function, iterable, …)
function – 函数,有两个参数
iterable – 一个或多个序列
Python 2.x 返回列表。
Python 3.x 返回迭代器。
生成器表达式—yield
yield和return不能再同一个分支同时使用,可以在不同的分支出现
装饰器
装饰器的作用是为了实现代码重用。
在上述代码中,deco函数是用来计算某个函数的运行时间的,这样的代码可能会被经常重复调用,这个时候我么就该考虑装饰器了。
装饰器的返回值是另一个函数,这样在调用其他函数之后,可以使得该函数的名称发生变化。
但这样的代码有些繁琐,每一次都需要接收返回值,python提供了装饰器的语法糖‘@’来精简代码。
闭包
闭包是词法闭包的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,闭包是由函数与其相关的引用环境组合而成的实体。
创建闭包:
(1)闭包函数必须有内嵌函数
(2)内嵌函数需要引用该内嵌函数上一级变量
(3)闭包函数必须返回内嵌函数