文件的替换:
f = open("yesterday2","r",encoding="utf_8") f_new = open("yesterday2.bak","w",encoding="utf-8") #find_str = sys.argv[1] #replace_str = sys.argv[2] for line in f: if "为何她远去" in line: line = line.replace("为何她远去","为何她离我远去") f_new.write(line) f.close() f_new.close()with语句
with open("yesterday2","r",encoding="utf-8") as f: for line in f: print(line)
自动关闭文件
文件操作
with open("yesterday2","r",encoding="utf-8") as f,\ open("yesterday2","r",encoding="utf-8") as f2: for line in f: print(line)
6字符编码与转码
Unicode 代码转化的中间站
s= "你好" s_gbk = s.encode("gbk") print(s_gbk) print(s.encode()) gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8") print("utf",gbk_to_utf8)
7函数与函数式编程
1面向对象:-----类,class
2面向过程:-----过程,def
3函数式编程:-----函数,def
函数:是逻辑结构化和过程化的一种编程方法。
#函数 def func1(): "'testing'" print('in the func1') return 0 #过程 def func2(): '''testing''' print('in the func2') x=func1() y=func2() print('from func1 return is %s'%x) print('from func2 return is %s'%y)
4函数定义
import time
def logger(): time_format = '%Y-%m-%d %X' time_current = time.strftime(time_format) with open('a.text', 'a+') as f: f.write('%s end action\n' %time_current) def test1(): print('in the text1') logger() def test2(): print('in the text2') logger() def test3(): print('in the text3') logger()
5函数返回值
test1()
test2()
test3()
def test1(): print('in the test1') def test2(): print('in the test1') return 0 def test3(): print('in the test1') return 1,'hello',['zhang','wu'],{'name':'zhang'} x = test1() y = test2() z = test3() print(x) print(y) print(z)
返回值0,返回none,返回值tuple。
6函数调用
形参和实参
def test(x,y): print(x) print(y)
test(y=2,x=1)#与形参顺序无关 test(1,2)#与形参一一对应
形参(x,y)实参(1,2)(一一对应关系)
def test(x,y,z): print(x) print(y) print(z) #test(y=2,x=1)#与形参顺序无关,关键字调用 #test(1,2)#与形参一一对应,位置参数
test(6,z=4,y=2)#位置参数一定在关键字参数前面
默认参数
def test(x,y=2): print(x) print(y) test(1,3) #默认参数特点,调用参数的时候,默认参数非必须传递
#用途:1.默认安装值 2.
参数组
def test(*args): print(*args) test(1,2,34,4,6) test(*[1,2,3,4,5])#args= tupple([1,2,3,4,5])
def test1(x,*args): print(x) print(args) test1(1,2,3,4,5,6)
#**kwargs:把N个关键字参数,转换成字典的方式 def test2(**kwargs): print(kwargs)
test2(name='zhang',age = 8,sex = 'N')
test2(**{
'name'
:
'zhang'
,
'age'
:
8
})
字典
def test2(**kwargs): print(['name']) print(['age']) print(['sex']) test2(name='zhang',age = 8,sex = 'N')
def test3(name,**Kwargs): print(name) print(Kwargs) test3('zhang',age = 18,sex = 'm')方式3
def test4(name,age=18,**Kwargs): print(name) print(age) print(Kwargs) test4('zhang',sex = 'm',hobby='nu',age=7)
方式4
#args接受n个未知参数,装换成字典的方式
def test4(name,age=18,*args,**Kwargs): print(name) print(age) print(args) print(Kwargs) test4('zhang',sex = 'm',hobby='nu',age=7)
局部变量(只在函数内部起作用)
def change_name(name): print("before change",name) name = "zhang" #这个函数就是这个变量的作用域 print("after change",name) name = "ZHang" change_name(name)
print(name)
全局变量
school = "zhang.edu"#全局变量 def change_name(name): school = "TYU" print("before change",name,school) name = "zhang" #这个函数就是这个变量的作用域,只在函数中生效 print("after change",name) print(school) name = "ZHang" change_name(name) print(name)
改变全局变量不采用(不能再函数里面改全局变量)字符串,变量
def change_name(): global name name = "zhang" change_name() print(name)
列表,字典,集合,类这些,可以在局部该全局
school = "zhang.edu"#全局变量 names = ["zhang","guo","qi"] def change_name(): names[0] = "zhang88" print("inside func",names) change_name() print(names)
7递归
1必须有一个明确的结束条件
def calc(n):#不允许
print(n)
return calc(n+1)
calc(0)
2每次进入更深一层递归时,问题规模相比上次递归应有所减少;
3递归效率不高,递归层次过多,导致栈溢出;
def calc(n):#简单的递归 print(n) if int(n/2) >0: return calc(int(n/2)) print("->",n) calc(10)
8函数式编程
1.函数编程就是一种抽象成度很高的编程范式,编写的函数没有变量;(一输入对应一输出);
var result = subtract(multiply(add(1,2),3),4));
9高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接受另一个函数作为参数,这种函数就称之为高阶函数。
def add(a,b,f): return f(a)+f(b) res = add(3,-6,abs) print(res)