• 文件指针,函数


    文件内指针移动:
      强调:只有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)

  • 相关阅读:
    COGS 577 蝗灾 线段树+CDQ分治
    BZOJ 1305 二分+网络流
    BZOJ 1066 Dinic
    BZOJ 3544 treap (set)
    BZOJ 3940 AC自动机
    BZOJ 1503 treap
    BZOJ 3172 AC自动机
    BZOJ 2553 AC自动机+矩阵快速幂 (神题)
    BZOJ1901 ZOJ2112 线段树+treap (线段树套线段树)
    BZOJ 3196 线段树套平衡树
  • 原文地址:https://www.cnblogs.com/xuezhihao/p/10026437.html
Copyright © 2020-2023  润新知