python_函数_文件

 
函数
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\nabc","xxxxxxxxxt") #这里替换一个字符串
f.write(s)               #写入字符串
run()
tmp1.txt的内容是
test
abc
123
 
a+的方式
读写的方式打开文件,若文件不存在则创建文件
写的方式是指追加
with open("test.txt","a+") as f:
  f.write("123\n")
读的方式是指 with open(
"test.txt","a+") as f:   f.seek(0)   d = f.read()   f.write("123\n")   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\n") #但是文件写入的方式是覆盖原有内容

 

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

 

posted on 2016-08-09 14:15  zoeeeeee  阅读(206)  评论(0编辑  收藏  举报

导航