本篇内容
文件处理补充
函数基本语法及特性
参数
返回值
嵌套函数
一、文件处理补充
1、文件操作的内置方法
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
with open("test.txt","r+",encoding="utf-8") as file:
file.write("\naaaaaa") #换行写入aaaaaa
print(file.readline()) #以字符串的方式读一行test.txt的内容
print(file.read()) #以字符串的方式读光标以后的test.txt的所有内容
file.seek(0) #将光标回到开头处
file.flush() #刷新内存中的内容到test.txt中
print(file.readlines()) #以列表的方式读光标以后的test.txt的所有内容
print(file.tell()) #打印光标在第一个字符
file.close() #关闭test.txt在内存的打开
2、文本操作a模式
文件以a模式打开,光标会默认在文本的末尾。a模式只可以追加,不可读。而a+模式既可以追加,又可以读。当文件不存在的时候,会创建文件,并追加写入。
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
with open("test.txt","a",encoding="utf-8") as file:
file.write("test")
3、文件操作b模式
文件以b模式打开,默认字符是以bytes的字符集打开的,无需自己定义以什么字符集打开。
以下是模拟linux的tail -f命令的代码:
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
import time, sys
def tail_file(parameter,f_file):
with open(f_file,"rb") as f:
f.seek(0,2)
while True:
line = f.readline()
if line:
print(line.decode("utf-8"),end="")
else:
time.sleep(1)
if __name__ == "__main__":
tail_file(sys.argv[1], sys.argv[2])
b模式还可以完成图片或者视频的复制功能。
以下是模拟linux的copy命令的代码:
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
import sys
def copy_file(old_file, new_file):
with open(old_file,"rb") as f_read, open(new_file,"wb") as f_write:
for line in f_read:
f_write.write(line)
if __name__ == "__main__":
copy_file(sys.argv[1], sys.argv[2])
二、函数基本语法及特性
函数是什么?
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
减少重复代码
使程序变的可扩展
使程序变得易维护
1.语法定义
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test():
print("Hello,World")
test()
2.函数即变量
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def foo():
print("foo")
bar()
def bar():
print("bar")
foo() #函数可以正常运行,说明函数是先定义,再调用。这一点与变量相同。
3.函数还可以传递参数
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
a = 1
b = 10
c = a + b
print(c)
def test(x, y):
z = x + y
return z
res = test(x=1,y=10)
print(res)
三、参数
1.形参与实参
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
2.位置参数数与关键字参数
注意:关键字参数不能在位置参数的前面
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def user_info(name, age, sex):
print(name)
print(age)
print(sex)
user_info("yanglei", 18, "male") #位置实参
user_info(name="yanglei", age=18, sex="male") #关键字实参
user_info("yanglei", 18, sex="male") #位置实参与关键字实参混合
user_info("yanglei", age=18, sex="male") #位置实参与关键字实参混合
3.非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
args
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test(x,y,*args):
print(x)
print(y)
print(args)
test(1,2,3,4,5,6,7)
kwargs
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test(x,y,**kwargs):
print(x)
print(y)
print(kwargs)
test(x=1,y=2,z=3,a=4,j=5,g=6,l=7)
四、返回值
要想获取函数的执行结果,就可以用return语句把结果返回。
注意:
函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束
如果未在函数中指定return,那这个函数的返回值为None
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test():
print("test")
return
print("test")
print("test")
print("test")
test()
#return后面的三个打印test不会被执行
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test():
print("test")
return
res = test()
print(res)
#return会默认返回None
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test():
print("test")
return test1
def test1():
print("test1")
res = test()
res()
#return可以返回你定义的值,包括函数也可以被返回
五、嵌套函数
嵌套函数,顾名思义就是函数里面套函数。
#!/usr/bin/env pyhon
#encoding: utf-8
#auth: yanglei
def test():
print("test")
def test1():
print("test1")
test1()
test()