函数
1、面向对象的编程 2、面向过程的编程 #没有return的叫做过程 3、函数式编程 #有return的返回叫做函数
传参的方式
1、可以定义默认传参的方式,位置调用的传参方式,与位置有关
def run(x=1,y=2) print (x,y) run()
2、关键字调用,与位置无关,会输出 2,1 def test1(x,y): print (x) print (y) test1(y=1,x=2)
ps : 关键参数不能在中间
3、参数组传参(单*) 接受的是N个位置参数,不能接受关键字参数,最终会转换成元祖 def test1(*args): print (args,type(args)) for data in (args): print (data,type(data)) test1(1,3,4,5) def test1(x,*args): print (x) print (args) test1(1,2,3,4,5,6)
4、参数组传参(双*) 接收的是字典,传入的关键子必须是key=value格式就是字典格式
**kwargs参数组必须往后放置 def test1(**kwargs): print (kwargs) test1(name="alex",age="20",sex="nan")
小练习
def test1(x,y,z=1,*args,**kwargs): print (x) print (y) print (z) print (args) print (kwargs["name"]) test1(1,2,3,4,5,6,name="alex",age="20",sex="nan") 输出 1 2 alex (4, 5, 6) {'name': 'alex', 'sex': 'nan', 'age': '20'}
局部变量和全局变量
一、在函数内生效的变量叫全局变量
二、在全局生效的变量叫全局变量
三、递归函数
特性
1.必须有明确的结束条件
2.每次进入下一个递归层的时候都应该比上一层有所减少
3.递归层次不高,容易导致内存溢出
四、高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res)
eval可以把str转成字典
比如说在python3中用input这个函数,传入的都是str类型,这样的话可以用 user_input = eval(uesr_input) 给转成字典再处理非常好使 case {'bakend': 'www.old.org','record':{'server': '100.1.7.9','weight': 20,'maxconn': 30}}
练习如何在文件中替换修改字符
因为在用a+ r+等的时候都会向文件末尾进行追加,当需要修改一个文件的内容的时候只有2种方法
1、写到内存中修改,修改完毕用truncat清空文件再写回去
2、直接w+创建另外一个文件,把东西写到另外一个文件,再os.rename os.remove替换文件
case1 内存中修改
def run():
f = open("tmp1.txt","a+") #这里F打开文件后指针就已经去了末尾
f.seek(0) #将指针指会开始位置,否则f.read读不到东西
m = f.read()
print (m)
f.seek(0) #读完后指针又去了末尾,把他再调回起始位置
f.truncate(0) #截断文件,0代表从起始位置开始截断
s = m.replace("test abc","xxxxxxxxxt") #这里替换一个字符串
f.write(s) #写入字符串
run()
tmp1.txt的内容是
test
abc
123
a+的方式
读写的方式打开文件,若文件不存在则创建文件
写的方式是指追加 with open("test.txt","a+") as f: f.write("123 ")
读的方式是指 with open("test.txt","a+") as f: f.seek(0) d = f.read() f.write("123 ") print (d)
r+和a+的最大区别就是
r+如果先读后写,则是末尾追加,如果直接写则是覆盖
先读后写 with open("test.in", 'r+')as f: f.readline() f.write("addition") hello1 ok2 byebye3 addition
r+的方式
r+的方式是读写方式打开
读
with open("test.txt","r+") as f:
print(f.tell()) #这里输出的位置是0
print(f.read()) #因为是0开始的所以这里会输出所有内容
print(f.tell()) #这里输出的是文件末尾
写的方式是覆盖原有内容,从0开始写入
with open("test2.txt","r+") as f:
print(f.tell()) #还是从0开始
f.write("aaaaaaaass ") #但是文件写入的方式是覆盖原有内容
tell()判断指针的方法
这里假设test2.txt文件内容是
1 2 3
with open("test2.txt","r+") as f: print (f.tell()) d=f.read() print (len(d),f.tell())
输出结果如下,也就是说指针对这的是末尾的空字符,假设你有空格回车都要算上,最后len长度+1就是你指针的位置
0
5 7