• 文件内指针的移动,函数的基本使用,函数的返回值,函数参数的使用


    强调:只有t模式下read(n),n代表字符个数,除此以外都是以字节为单位
    with open('a.txt',mode='rt',encoding='utf-8') as f:
    res=f.read(4)
    print(res)

    with open('a.txt',mode='rb') as f:
    res=f.read(3)
    print(res.decode('utf-8'))

    with open('a.txt',mode='at',encoding='utf-8') as f:
    f.truncate(3)    截断,清除之后的字符

    f.seek():指针移动是以字节为单位的
    三种模式:只有0模式既可以在t下用也可以在b下用,而1、2两种模式只能在b模式下使用
    0(默认的):参照文件开头
    with open('a.txt',mode='rt',encoding='utf-8') as f:
    f.seek(3,0)
    print(f.tell())
    print(f.read())

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

    2: 参照文件末尾
    with open('a.txt',mode='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. 什么是函数
    在程序具备某一功能的工具=》函数
    事先准备好工具=》函数的定义
    遇到应用场景、拿来就用=》函数的调用

    分为两大类:
    1. 内置函数
    2. 自定义函数


    2. 为何要用函数
    1. 代码冗余
    2. 程序的组织结构不清晰,可读性差
    3. 扩展性差

    3. 如何用函数
    函数的使用必须遵循一个原则:
    1. 先定义
    定义语法:
    def 函数名(参1,参2,参3,...):
    """
    文档注释
    """
    代码1
    代码2
    代码3
    ...
    return 值

    2. 后调用
    函数名()



    一. 定义阶段: 只检测语法,不执行代码
    def func():
    print('from func 1')
    print('from func 2')
    print('from func 3')
    print('from func 4')

    二. 调用阶段: 开始执行函数体代码
    func()
    func()
    func()

    示范一:
    def foo():
    print('from foo')
    bar()

    foo()


    from foo
    示范二:
    def bar():
    print('from bar')

    def foo():
    print('from foo')
    bar()

    foo()

    from foo
    from bar

    示范三:
    定义
    def foo():
    print('from foo')
    bar()

    def bar():
    print('from bar')

    调用
    foo()

    from foo
    from bar

    三:定义函数的三种形式
    1. 无参函数
    def func():
    print('from func')

    func()

    2. 有参函数
    def max2(x,y):
    # x=1
    # y=2
    if x > y:
    print(x)
    else:
    print(y)

    max2(1,2)
    max2(3,4)


    3. 空函数
    def register():
    pass


    四:调用函数的三种形式
    1 语句形式
    def func():
    print('from func')

    func()
    2 表达式形式
    def max2(x,y):
    if x > y:
    return x
    else:
    return y

    res=max2(1000,2000) * 12
    print(res)

    res=len('hello')
    print(res)

    3 函数的调用可以当作另外一个函数的参数传入
    def max2(x,y):
    if x > y:
    return x
    else:
    return y

    res=max2(max2(1,2),3)
    print(res)

    1. 什么是函数的返回值
    返回值是函数体代码的运行成果

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

    3. 如何用
    return 返回值的特点:
      1 返回值没有类型限制
       返回值没有个数限制
      返回1个值:调用函数拿到的结果就是一个值
      返回多个值:调用函数拿到的结果就是一个元组
      返回0个值,或者不写return:调用函数拿到的结果就是None


    2. return是函数结束运行的标志,函数内可以有多个return,但只要执行一次函数就立即结束,并且将return后的值当作本次调用的结果返回
    
    
    def func():
    # return 1,1.2,'aaa',[1,2,3]
    pass
    res=func()
    print(res)


    def func():
    print('aaaa')
    return 1
    print('bbb')
    return 2
    print('ccc')
    return 3


    func()


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

    func(1,2)
    print(x)
    a=1
    b=2
    func(a,b)

    二:函数参数详解
    1. 形参:
    1.1 位置形参:在定义阶段,按照从左到右的顺序依次定义的形参
    特点:必须被传值
    def func(x,y,z):
    print(x,y,z)


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

    1.2 默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参
    特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值
    注意点:位置形参必须放在默认形参的前面

    def func(x,y=2):
    print(x,y)

    func(1)
    func(1,3333333)

    def register(name,age,sex='male'):
    print(name,age,sex)

    register('靓仔',18,)
    register('小红',28,)
    register('小黑',38,)
    register('花姑娘',16,'female')

    def func(y=2,x):
    print(x,y)


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

    func(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)

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

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

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


    2.3 实参中*与**的用法
    1. 实参中带*:先将实参打散成位置实参,然后再与形参做对应
    def func(x,y,z):
    print(x,y,z)

    func(1,[2,3])
    func(*[1,2,3]) #func(1,2,3)
    func(*'hello') #func('h','e','l','l','o')
    func(*'hel') #func('h','e','l')

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

    func(**{'x':1,'z':3,'y':2}) #func(z=3,y=2,x=1)


    def index(x,y,z):
    print(x,y,z)

    def wrapper(*args,**kwargs): # args=(1,2,3,4,5) kwargs={'c':3,'b':2,'a':1}
    index(*args,**kwargs) #index(*(1,2,3,4,5),**{'c':3,'b':2,'a':1}) #index(1,2,3,4,5,a=1,b=2,c=3)
    index(1,z=3,y=2)
    wrapper(1,2,3,4,5,a=1,b=2,c=3)

    wrapper(1,z=3,y=2)
  • 相关阅读:
    DoTween插件的使用
    Unity3D协程的简单使用
    排序和双指针,减小时间复杂度
    Unity3D自定义菜单组件
    滑动窗口思路分析
    Unity3D中的序列化特性和DLL特性
    求数组的交集,以及贪心算法的使用
    随笔开始啦
    实例26 循环体的过滤器
    实例25 终止循环体
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10026466.html
Copyright © 2020-2023  润新知