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

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

"""
文件内容:哈哈哈哈
呵呵呵呵
"""
with open(r'C:\Users\test.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\test.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\test.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\test.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\test.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

Python文件指针与Python函数的更多相关文章

  1. 将python文件加入到python的环境变量中

    在python中,把一个python文件加入到python环境变量中,以方便其他python文件调用.有两种方式,下面对其进行简单的介绍 方式一: 导入系统自带的sys模块,然后将文件的路径进行追加或 ...

  2. python 文件指针及文件覆盖

    1.文件纯净模式延伸 r+t:可读.可写 w+t:可写.可读with open('b.txt','w+t',encoding='utf-8') as f: print(f.readable()) pr ...

  3. python 文件和路径操作函数小结

    1: os.listdir(path) //path为目录 功能相当于在path目录下执行dir命令,返回为list类型 print os.listdir('..') 2: os.path.walk( ...

  4. python文件及路径管理函数

    glob模块 说明: 1.glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索, 支持通配符操作 *.?.[] 这三个通配符,*代表0 ...

  5. python文件之间变量和函数的 获取/调用 的方法

  6. [Vim]新建python文件自动添加python header

    使用vim脚本来实现的,使用了模板,几行代码就能实现很实用. ~/.vimrc 中的代码 "auto add pyhton header --start autocmd BufNewFile ...

  7. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  8. Python文件读写机制

    Python提供了必要的函数和方法进行默认情况下的文件基本操作 文件打开方式: open(name[,mode[buf]]) name:文件路径 mode:打开方式 buf:缓冲buffering大小 ...

  9. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

随机推荐

  1. 测试 | 代码覆盖测试工具 | Eclemma

    安装: 打开eclipse,点击Help菜单下的Install New Software 在弹出的对话框中,点击Add 输入Name,如EclEmma 输入Location: http://updat ...

  2. iOS蓝牙开发总结-4

    蓝牙开发总结 只要熟悉蓝牙的流程,和蓝牙中每一个角色的作用,其实蓝牙通讯并没有想象中的难 1.蓝牙中心CBCentralManager:一般指得是iPhone手机 2.设备(外设)CBPeripher ...

  3. Tomcat固定的目录结构

    1. /work Tomcat把由Jsp生成的Servlet放于此目录下. 2. /webapps 当发布Web应用时,默认情况下把Web应用文件放于此目录下. 3. /logs 存放Tomcat的日 ...

  4. Parenthesis UVALive - 4882 删除不必要的括号序列,模拟题 + 数据

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. Spark Mllib里如何将数值特征字段用StandardScaler进行标准化(图文详解)

    不多说,直接上干货! 首先,要明白为什么有时候,数值特征字段需要进行标准化? 答:因为,当我们若用回归分析算法时,必须将数值特征字段进行标准化,这是因为数值特征字段单位不同,数字差异很大,所以无法彼此 ...

  6. 《javascript设计模式》笔记之第五章:单体模式

    一:单体的基本结构: 最简单的单体,实际就是一个对象字面量: var Singleton = { attribute1: true, attribute2, method1: function() { ...

  7. cf1028C. Rectangles(前缀和)

    题意 给出$n$个矩形,找出一个点,使得至少在$n$个矩阵内 Sol 呵呵哒,昨天cf半夜场,一道全场切的题,我没做出来..不想找什么理由,不会做就是不会做.. 一个很显然的性质,如果存在一个点 / ...

  8. P1791 线段覆盖

    题目描述 已知数轴上0<N<10000条线段.每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义.端点坐标在(-999,999)内,坐标为整数.有些线段可能相交.编程 ...

  9. react项目构建中的坑—淘宝镜像安装后要设置

    基本的搭建步骤参考博客:https://blog.csdn.net/qq_27727251/article/details/86593415 这里要强调的坑是:安装完淘宝镜像要将其设置为默认Regis ...

  10. 【读书笔记】构建之法(CH4~CH6)

    从chapter4至chapter6,围绕着构建过程的合作讨论构建之法,而合作与个人工作的区别却以一个微妙的问题为开端:阅读别人的代码有多难? 两人合作:(驾驶员与领航员) 合作要注意代码风格规范与设 ...