文件操作
'''
文件打开的模式:r,w,a
r 只读
w 覆盖写
a 追加
r+ 读写模式,追加
w+ 写读
a+ 追加写,读
rb,wb,ab 二进制格式操作,跨平台操作文件、流文件
'''
#data = open("geci.txt",encoding="utf-8").read() #打开及读取,一般不推荐
f = open("geci.txt",'r',encoding="utf-8") #文件句柄
data = f.read() #读取文件内容
print(data)
f.close()
f = open("geci.txt",'a',encoding="utf-8") #a追加,r读取,w写入 创建一个文件,覆盖原有的,写入内容
f.write("check it now\n")
f.write("切个脑\n")
f.close()
f = open("geci.txt",'r',encoding="utf-8") #文件句柄
data = f.read() #读取文件内容
print(data)
f.close()
f = open("geci.txt",'r',encoding="utf-8")
for i in range(5):
print(f.readline())
f = open("geci.txt",'r',encoding="utf-8")
for line in f.readlines():
print(line.strip()) #strip不打印空行
f = open("geci.txt",'r',encoding="utf-8")
f_new = open("geci_new.txt","w",encoding="utf-8")
#打开一个新文件,将原文件需要修改内容替换之后,重新写入
for line in f:
if "第5行" in line:
line = line.replace("第5行","新xx第5行")
f_new.write(line)
f.close()
f_new.close()
f_new = open("geci_new.txt","r",encoding="utf-8")
tt = f_new.read()
print(tt)
f_new.close()
print("="*50)
#with打开后自动关闭,可打开多个文件,\换行
with open("geci.txt","r",encoding="utf-8") as f,\
open("geci_new.txt","r",encoding="utf-8"):
for line in f:
print(line)
文件编码
#-*- coding:gbk -*-
s = "中文"
print(s)
print(s.encode("gbk"))
print(s.encode("utf-8"))
print(s.encode("gb2312").decode("gbk"))
函数
#函数
def func1():
'''testing1'''
print('func1 xxx')
return 0
#过程
def func2():
'''testing2'''
print('func2 aaa')
#函数和过程的区别:返回值
x=func1()
y=func2()
print(x,y)
import time
'''函数:代码重复利用、保持一致性、扩展性'''
def logger():
time_format = '%Y-%m-%d %X'
time_current = time.strftime(time_format)
with open('a.txt','a+') as f:
f.write('action %s\n' %time_current)
def test1():
print('test1')
logger()
def test2():
print('test2')
logger()
def test3():
print('test3')
logger()
test1()
test2()
test3()
'''return:结束函数,返回值
返回1:object
可以返回很多值:元组'''
def test1():
print('test1')
return 0
print('end')
def test2():
print('test2')
return 1,'hello',['aaa','bbb','ccc'],{'name':'qingfeng'}
def test3():
pass
x = test1()
y = test2()
z = test3()
print(x,y,z)
#x,y形参,位置参数
def test(x,y):
print(x)
print(y)
#1,2实参
test(1,2) #需要一一对应
test(y=2,x=1) #指定后,与形参顺序无关
test(3,y=2) #混合调用,按位置顺序,关键参数只能写在位置参数后面
#默认参数
def test(x,y=2):
print(x)
print(y)
test(1) #有默认参数的情况下,y参数可以不赋值
#用途:默认值,减少调用失败
#*args开头定义参数组
def test(*args):
print(args)
test(1,2,3,4,5,6,11)
test(*[1,2,3])
#参数组最终都是转换为元组
def logger(source):
print("from %s" %source)
#**kwargs开头定义的是字典类型
def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['high'])
logger("info xxx aaaaxxxbbbccc") #函数中调用其他函数
test2(name='qingfeng',high=177)
#参数组只能放在最后
#*args接收位置参数,**kwargs接收关键字参数
name = "qingfeng" #程序开始定义全局变量
s = "test global"
def change_name(name):
global s #函数中定义为全局变量,不符合编码规范,不要这么写!!!尤其外部没有定义的情况下
s = "test change global"
print(s)
print("before change in func",name)
name = "qingfeng" #局部变量,只在函数中生效,即使重名
print("after change in func",name)
change_name(name) #全局变量传入函数
print(name) #打印全局变量
print(s) #函数中已经修改了全局变量
names = ["aaaa","bbb","ccc"]
def change_names():
names[0] = "change name"
print("inside func",names)
change_names()
print(names)
'''
列表、字典等可以在函数中修改
'''
'''
递归
1、必须有一个明确的结束条件
2、每次进入更深一层时,规模应减少
3、递归效率不高,层次过多容易导致栈溢出
'''
def calc(n):
print(n)
if int(n/2) > 0 :
return calc(int(n/2))
print("===",n)
calc(100)
#高阶函数:把一个函数作为参数
#应用场景不多
def add(x,y,f):
return f(x)+f(y)
res = add(3,-9,abs) #abs函数作为参数传入add函数
print(res)
python学习笔记三
最新推荐文章于 2024-04-29 21:59:18 发布