文件读写:
# author:zingerman f = open('testfile','a',encoding='utf-8')#'r':只读 'w':只写 'a':增加 f其实就是一个文件的句柄,是文件的内存地址
#data=f.read() #读文件的内容 ()内可指定参数,(10)表示读取十个字符,默认读所有内容
#print(data)
#f.write('22222') #当为‘w’覆盖旧文件,并写入内容,返回文件大小
f.write('33333') #当为'a' 在文件末尾写入内容,不覆盖旧文件
# author:zingerman f = open('testfile','r',encoding='utf-8') ''' for i in range(7): print(f.readline()) #从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符 for index ,line in enumerate(f.readlines()): if index==2: print('-----我是分割符-----') #插入分割符 continue print(line.strip()) #取出每行的索引,循环打印 ''' for i in f: #这是的f就是一个迭代器 写入一行时,把上一行在内存中删除,而上面的方法是把整个文件读入内存中 print(i)
文件操作方法:
# author:zingerman f = open('testfile','r',encoding='utf-8') print(f.name) print(f.readline()) f.seek(0,0) print(f.readline()) f.flush() #将缓冲区中的数据立刻写入文件,同时清空缓冲区 f.close() #关闭文件后,文件对象不可操作,默认退出程序关闭
tell方法:返回文件的当前位置,即文件指针当前位置
# author:zingerman f = open('testfile','r',encoding='utf-8') print(f.name) print(f.readline()) f.seek(0,2) print(f.readline()) print(f.tell())
truncate() 方法:用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
writelines() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。
# author:zingerman f = open('testfile','w',encoding='utf-8') print(f.name) seq=['111\n','222'] f.writelines(seq) f.close() #关闭文件后,文件对象不可操作,默认退出程序关闭
python函数:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数:
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
参数调用:
位置参数,关键字参数,默认参数,不定长参数
# author:zingerman def my_func (x,y,z,w=1): #位置参数,实参与形参一一对应 #关键字参数,与参数顺序无关,且关键字参数只能放在位置参数后面 #默认参数,调用函数的时候,默认参数非必须传递,一般把默认参数放在最后面, print(x) print(y) print(z) print(w) my_func(1,2,3) my_func(1,2,z=3) #my_func(1,y=2,3)#报错:SyntaxError: positional argument follows keyword argument my_func(1,2,z=3,w=4)#可为默认参数赋值,赋值时相当与关键字参数,需要在位置参数后面
# author:zingerman def my_func1 (x,*args): #两种形式:*args **args #*args接受N个位置参数,转换成元组形式 print(x) print(args) def my_func2 (x,**args): #接受N个关键字参数,转换成字典的方式 print(x) print(args) print(args['name']) def my_func3 (x,y=2,*args,**kwargs): print(x) print(y) print(args) print(kwargs) my_func1(1,2,3,4) #结果:1 (2,3,4) my_func2(1,name='hulida',sex='nan') my_func3(1,3,4,5,name='hulida',sex='nan')#1 3 (4, 5) {'name': 'hulida', 'sex': 'nan'}
全局变量和局部变量:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
可在函数内部通过global将局部变量变成全局变量,但一般不这样做
递归:一个函数调用自身
1.必须有一个结束条件,否则会无限循环
2.每次进入更深层次的递归,规模都比上一次规模小
3.递归效率不高,多次调用会导致栈溢出
# author:zingerman def calnum (n): print(n) if int(n/2)>0: return calnum(n/2) print(n) calnum(10)
#结果10 5.0 2.5 1.25 1.25
匿名函数
python 使用 lambda 来创建匿名函数。
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# author:zingerman sum=lambda arg1,arg2:arg1+arg2 print(sum(1,2))