python学习笔记三

文件操作
'''
文件打开的模式: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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值