文件指针,函数

Posted xuezhihao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件指针,函数相关的知识,希望对你有一定的参考价值。

文件内指针移动:
  强调:只有t模式下read(n),n代表字符个数,除此之外都是以字节为单位

    with open(‘a.txt‘,‘rt‘,encoding=‘utf-8‘)as f:
    res=f.read(4)
    print(res)
  以字节为单位:
    with open(‘a.txt‘,‘at‘,encoding=‘utf-8‘)as f:
    f.truncate(4)
  指针移动是以字节为单位的:
  三种模式:只有0模式可以在t和b下面,只有1,2模式只能在b模式下
    0 :参照文件开头

      with open(‘a.txt‘,‘rt‘,encoding=‘utf-8‘)as f:
      f.seek(3,0)
      print(f.tell())
      print(f.read())

    1 :参照指针当前所在的位置
      with open(‘a.txt‘,‘rb‘)as f:
      f.read(2)
      f.seek(4,1)
      print(f.read().decode(‘utf-8‘))

    2 :参照文件末尾
      with open(‘a.txt‘,‘rb‘)as f:
      f.seek(-5,2)
      print(f.tell())
      print(f.read().decode(‘utf-8‘))

 

  tail -f access.log
  import time
  with open(‘access.log‘,mode=‘rb‘)as f:
  f.seek(0,2)
  while True:
    line = f.readline()
  if len(line) == 0 :
    time.sleep(0.1)
  else:
    print(line.decode(‘utf-8‘),end=‘‘)

什么是函数
  在程序中具备某一功能的工具==>>函数
  事先准备好的工具,函数的定义
  遇到应用场景,拿来就用,函数的调用
为何要用函数
  1.代码冗余
  2.程序的组织结构不清晰,可读性差
  3.扩展性差

两大类:
  内置函数
  自定义函数


如何用函数
  先定义
定义语法:
def 函数名(参数1,参数2,参数3。。。。。):
"""
文档注释
"""
代码1
代码2
。。。
return 值

  后调用
函数名

 

一、定义阶段:只检测语法,不执行代码
def func():
print(‘from func 1‘)

二、调用阶段:开始执行函数体代码
func()
# 定义
def faa():
print(‘sdsdsdsdya‘)
fbb()

def fbb():
print(‘sbsbsbsbya‘)
# 调用
faa()

定义函数的三种形式:
  1.无参函数
def func():
print(‘from func‘)
func()
  2.有参函数
def max(x,y):
if x>y:
print(x)
else:
print(y)

max(1,2)

  3.空函数
def register():
pass

调用函数的三种形式:
  1.语句形式

  2.表达式形式
def max(x,y):
if x>y:
return x
else:
return y
res=max(1,2)
print(res)


  3.当中另一个函数的参数


  函数的返回值:
    返回值是函数体代码的运行成果

  为何要有返回值:
    需要拿到函数的处理结果做进一步的处理,则函数必须有返回值

  如何用
return 返回值的特点:
  1.返回值没有类型限制,也没有个数限制
    return或者函数没有return:返回值None
    return值:返回的就是该值本身
    return值1,值2,值3,返回的是元祖(值1,值2,值3)

2.return是函数结果运行的标志,函数内可以有多个return,但只要执行一次函数就立即结束,并且将return后的值当作本次调用的结果返回

函数的参数分为两大类:
  1.形参:在定义函数时括号内指定的参数(变量名)
  2.实参:在调用函数时括号内传入的值(变量值)
  二者的关系:在调用函数时,实参值会传给形参,这种绑定关系在调用函数时生效,调用结束,绑定关系解除

函数参数详解:
  1.形参:
  位置形参:在定义阶段,按照从左到右的顺序依次定义的形参
  特点:必须被传值

  默认参数:在定义阶段,就已经为某个形参赋值
  特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值
  注意点:位置形参必须放在默认形参的前面
  def func(x,y=2):
  print(x,y)

 

 

形参中*与**的用法
形参中带*:*会将溢出的位置实参存成元祖的形式然后赋值其后变量名
def func(x, y, *z):
print(x,y,z)

func(1,2,3,4,5,6)

形参中带**:**会将溢出的关键字实参存成字典的格式然后赋值其后变量名
def func(x,y,**kwargs):
print(x,y,kwargs)
func(1,y=2,z=5,m=3,n=4)

 

2.实参
  位置实参:在调用阶段,按照从左到右的顺序依次传入的值
  特点:这种传值方式会与形参一一对应

  关键字实参:在调用阶段,按照key=value的格式传值
  特点:可以完全打乱位置,但仍然能为指定的形参传值
  def func(z, y, x):
  pass

  func(z=3,y=2,x=1)

 

 

注意:可以混用关键字实参与位置实参,但是
同一个形参只能被赋值一次
位置实参必须跟在关键字实参的前面
func(1,z=3,y=2)
func(1,z=3,y=2,x=333)
func(x=1,2,z=3)#报语法错误

实参中带*:先将实参打散成位置实参,然后再与形参做对应
def func(x,y,z):
print(x,y,z)
func(1,[2,3],6)
func(*[1,2,3])
func(*‘hel‘)

实参中带**:先将实参打散成关键字实参,然后再与形参做对应
def func(x,y,z):
print(x,y,z)
func(**{‘x‘:1,‘z‘:3,‘y‘:2})

 

def index(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs):
index(*args,**kwargs)

wrapper(1,2,3,4,5,a=1,b=2,c=3)

wrapper(1,z=3,y=2)

 





























































































































以上是关于文件指针,函数的主要内容,如果未能解决你的问题,请参考以下文章

文件指针,函数

C语言 结构体指针字符 二进制文件写入和读取

C++ 文件的随机读写

C++移动和获取文件读写指针(seekpseekgtellgtellp)

检测文件指针对象

C 语言文件操作 ( fseek 函数 )