zoukankan      html  css  js  c++  java
  • Python文件指针与Python函数

    文件内指针移动:f.seek()

    强调:只有t模式下read(n),n代表字符的个数,除此以外都是以字节为单位。

    """
    文件内容:哈哈哈哈
            呵呵呵呵
    """
    with open(r'C:Users	est.txt', mode='rt', encoding='utf-8') as f:
        res = f.read(4)
        print(res)
        
        
    哈哈哈哈
    • f.truncate(size):从文件的首行首字符开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字节大小

    with open(r'C:Users	est.txt', mode='at', encoding='utf-8') as f:
        f.truncate(3)
    • f.seek(offset,whence):指针移动是以字节为单位的

      • offset:开始的偏移量,也就是代表需要移动偏移的字节数

      • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

      • 三种模式:只有0模式下既可以在t下用也可以在b模式下用,而1、2两种模式只能在b模式下用。

        • 0(默认):参照文件开头

        with open(r'C:Users	est.txt',mode='rt',encoding='utf-8') as f:
            f.seek(3,0)  # offset:3字节;whence:0
            print(f.tell())  # 查看文件指针位置
            print(f.read())
        • 1:参照指针当前所在位置

        with open(r'C:Users	est.txt', mode='rb') as f:
            f.read(2)  # 文件指针读到第二字节
            f.seek(4, 1)  # 从指针当前位置再往右移动4字节
            print(f.tell())
            print(f.read().decode('utf-8'))  # b模式下,将读出的二进制码进行解码。
        # 注:当指针移动到某字符中间位置时,打印内容会报错
        • 2:参照文件文件末尾

        with open(r'C:Users	est.txt',mode='rb') as f:
            f.seek(-5, 2)  #从文件末尾操作指针时,往前操作注意偏移量为负数
            print(f.tell())
            print(f.read().decode('utf-8'))
            
        # 注:当指针移动到某字符中间位置时,打印内容会报错

    函数

    什么是函数

    在程序具备某一功能的工具—>函数

    事先准备好工具—>定义函数

    遇到应用场景,拿来就用—>函数的调用

    两大类:

    1. 内置函数

    2. 自定义函数

    为何要用函数

    • 没有用函数的三个问题

      1. 代码冗余

      2. 程序的组织结构不清晰,可读性差

      3. 扩展性差

    如何用函数

    函数的使用必须遵循一个原则:

    • 先定义

      定义语法:

      def 函数名(参1,参2,参3……):
          ""
          文件注释
          ""
          代码1
          代码2
          代码3
          ……
          return
      • 后调用

        函数名

    定义阶段:只检测语法,不执行代码(定义不分先后,存在即可)

    调用阶段:开始执行函数体代码

    定义先后顺序不受执行顺序的的影响,时两个独立的模块,但前提是必须在执行前有定义。

    def func1():
        print('Jason is a XX')
        func2()  # 虽然func2在func1之后定义但不影响程序的运行
    def func2():
        print('yeah,your are right !')
    ​
    func1()
    ​
    Jason is a XXX
    yeah,your are right !

    定义函数的三种形式:

    1. 无参函数:函数功能不需要与用户交互

      def func1():
          print('Jason is xxx')
    2. 有参函数:与用户交互,按照用户输入参数执行相应功能

      def max(x,y):
          if x > y:
              print(x)
          else:
              print(y)
    3. 空函数:

      def func():
      
      pass

    调用函数的三种形式:

    1. 语句形式:调用来单纯执行功能

      def func():
          相应功能
          ……
    2. 表达式形式:调用起来进行相应运算

      def add(num1,num2):
          add_r = num1 + num2
          return add_r
      ​
      ​
      data = add(45, 55)*1000
      print(data)
    3. 函数调用可以当做另一个函数的参数传入:调用来当做另一函数的参数,类似于嵌套

      def max1(x,y):
          if x > y:
              return x
          else:
              return y
      ​
      res=max2(max2(1,2),3)
      print(res)

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

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

    如何用返回值:

    • return 返回值的特点

      1. 返回值没有类型限制,也没有个数限制

        • return或者函数没有return,返回值为none

        • return值:返回的就是该值本身

        • return(多个值)值1,值2,值3:则返回元组形式(值1,值2,值3)

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

    函数参数的使用

    函数参数的分类

    形参:在定义函数时括号内指定的参数(变量名),称之为形参

    实参:在调用函数时括号内传入的值(变量值)称之为实参

    二者关系:在调用函数时,实参值(变量值)会在函数调用时绑定给形参(变量名),在调用结束时解除绑定

    函数参数详解

    1.形参

    • 位置形参:在定义阶段,按照从左到右的顺序依次定义的形参

    特点:必须被传值(多传值或者少传值都会报错)

    def func(x,y):  # x,y:形参,必须被传值
        print(x, y)
    ​
    func(1,2)  # 1,2,:实参,必须与形参一一对应
    • 默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参

      如有 与默认值不同,则以实参为准

      特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值

      注意点:默认形参必须在位置参数之前

      def register(name, age, gender='male'):
          print(name, age, gender)
      ​
      ​
      register('egon', 18)
      register('alice', 16, gender='female')
      ​
      egon 18 male
      alice 16 female
    • 形参中*与 * * 的用法(可变参数)

      • 用来接收溢出的位置实参和关键字实参

      1. 形参中带* : *会将溢出的位置实参存成元组的形式然后赋值其后变量名

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

        def func(x, y, **kwargs):
            print(x, y, kwargs)
        ​
        func(1,y=2,z=3,m=1,n=2)
        ​
        1 2 {'z': 3, 'm': 1, 'n': 2}

    2.实参

    1. 位置实参:在调用阶段,按照从左到右的顺序依次传入的值

      特点:这种传值方式会与形参一 一对应

    2. 关键字参数:在调用阶段,按照key-value的格式传值

      特点:可以完全打乱位置,但仍然能为指定形参传值

      注意:可以混用关键字实参与位置实参,但是

      1. 同一位置形参只能被赋值一次

      2. 位置实参必须跟在关键字实参的前面

    3. 实参中* 与* *的用法(可变参数)

      • 打散你需要赋值的容器类型

      1. 实参中带*:(当实参是可被for循环的数据结构)先将实参打散成位置实参,然后与形参做对应

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

        def func(x,y,z):
            print(x,y,z)
        ​
        func(**{'x':1,'z':3,'y':2})
        ​
        1 2 3
    人生如逆旅,我亦是行人.....
  • 相关阅读:
    PHP自学2——将用户提交表单存储到外部普通文件中
    PHP自学1——简单表单提交
    自学php的几个例子(包含AMP(Apache、MySQL、PHP)环境搭建链接)
    自学SQL语言的例子(使用MySQL实现)
    自学XML DOM的几个例子
    学习DTD和Schema的几个例子
    自学Xpath的几个例子
    自学XSL的几个例子
    java数据库连接池的介绍与定义一个简单的连接池
    Jquery Ajax 复杂json对象提交到WebService
  • 原文地址:https://www.cnblogs.com/liusijun113/p/10027738.html
Copyright © 2011-2022 走看看