• day11 文件的高级应用、文件修改的两种方式、函数的定义、函数的三种定义方式、函数的调用、函数的返回值、函数的参数


    文件的高级应用

    r/w/a

    即可读又可写(尽量不要使用) # r+ 是在后面追加
    with open('test.py', 'r+', encoding='utf8') as fr:
    data = fr.read()
    print(fr.writable())
    fr.write('x = 10')
    print(data)


    清空文件的功能是w提供的, w+更不要使用
    with open('test.py', 'w+', encoding='utf8') as fr:
    print(fr.readable())
    fr.write('x = 10')
    data = fr.read()
    print(data)


    a有追加的功能,a的指针在末尾,a+功能也没用
    with open('test.py', 'a+', encoding='utf8') as fr:
    data = fr.read() # 指针在末尾
    print(data)
    fr.write('x = 10')

    指针的应用,移动指针

    文件的内置方法
    seek(按字节位移)
    with open('test.py', 'rb') as fr:
    fr.seek(1) # 1表示位移1位,默认从文件头开始
    fr.seek(1, 0) # 1表示偏移1位,0表示从头开始
    fr.seek(2, 1) # 1表示偏移1位,1表示从当前位置开始
    fr.seek(0, 2) # 0表示偏移0位,2表示文件末开始,把指针移到文件末

    tell(字节)
    with open('test.py', 'r', encoding='utf8') as fr:
    fr.seek(2, 0)
    print(fr.tell())

    read(n)字符
    with open('test.py', 'r', encoding='utf8') as fr:
    print(fr.read(2)) # 读了6个字节 中 --> b'xe4xb8xad'
    truncate字节
    with open('test.py', 'a', encoding='utf8') as fr:
    fr.truncate(7)

    以上四个方法可以用,但没有必要


    文件修改的两种方式
    文件没有修改这一说,只有覆盖这一说
    1)一次性读取所有在内容
    import os
    with open('test.py', 'r', encoding='utf8') as fr,
            open('test_swap.py', 'w', encoding='utf8') as fw:
    data = fr.read()
    data = data.replace('sb', 'dsb')

    fw.write(data)

    os.remove('test.py') # 删除文件
    os.rename('test_swap.py', 'test.py') # 重命名文件

    2)一边读一边改
    import os
    with open('test.py', 'r', encoding='utf8') as fr,
    open('test_swap.py', 'w', encoding='utf8') as fw:
    for i in fr:
    i = i.replace('sb', 'dsb')
    fw.write(i)

    os.remove('test.py') # 删除文件
    os.rename('test_swap.py', 'test.py') # 重命名文件



    函数的定义
    '''
    def 函数名():  # 定义阶段(造车轮阶段)
    """函数注释写在这里""" # 函数相当于工具, 注释相当于工具的说明书
    <代码块>


    函数名() # 调用阶段(开车阶段)
    '''


    定义阶段不执行函数体代码,只检测语法错误
    def func():
    """func函数的注释"""
    # todo:未来写一个开车函数
    pass

    print(login.__doc__) # 记住



    函数的三种定义方式
    无参函数 # 不需要输入变量,可以单独使用
    def add():
    """无参函数"""
    x = input('num1:')
    y = input('num2:')

    print(int(x) + int(y))


    有参函数
    def add(x, y): # 必须输入参数,才能使用
    """有参函数"""
    print(int(x) + int(y))



    空函数: 定义了函数,啥都没有
    def func(): # 只指定了函数名没有实际内容
    pass

    函数的调用
    函数如果没有返回值的话看,会默认返回none

    def max_self(x, y):

    if x > y:
            return x
    else:
    return y
    1)max_self(1, 2)
    2)res = max_self(1, 2) * 12
    3)max_self(max_self(20000, 30000), 40000)

    函数的返回值
    def add(x, y):
      return x + y   # 函数的返回值; 终止函数(跳出函数)

    def add(x, y):
    # return (x, y, x + y) # return可以返回任意数据类型
    return x, y, x + y # return可以返回任意数据类型,不加括号返回多个值时,默认用元组的形式返回

    x,y,z = add(1, 2) # 解压缩
    print(x,y,z)



    函数的的参数
    形参: 定义阶段才有形参,形式参数,只是占个位置,具有描述意义

    实参: 调用阶段才有实参,实际的参数,具有具体的值


    位置形参: 一个一个的按顺序写形参,就叫位置形参
    def add(num1, num2): # 形参
    """有参函数"""
    print(num1)
    print(num2)
    print(int(num1) + int(num2))

    位置实参: 一个一个的按顺序写过去,就叫位置实参

    add(1, 2) # 实参

    两个位置形参,就必须得要两个位置实参对应,从左到右一一对应


    默认形参: 不需要传参,可以使用默认值; 传参就使用你传的值, 默认形参必须放到位置形参后面

    def shopping(name='nick'): # 形参经常会引用同一个值,可以将此值设置为默认值
    goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
    print(f'恭喜你这个小钢炮{name},得到{goods_dict[1]}一个')
    shopping('yongjiu')


    关键字实参: 按照形参名给定具体的值,可以打破位置形参必须得一一对应传值的规定,位置实参必须在关键字实参之前
    def shopping(x, name='nick'):
    goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
    print(f'恭喜你这个小钢炮{name},得到{goods_dict[x]}一个')
    shopping(1, name='yongjiu')

    # 函数的参数尽量不要超过3个
    # 需要的用的时候用,一般用位置形参+位置实参
     




     
  • 相关阅读:
    Java 执行
    Java 反射
    Mysql 日常
    Java 引用
    Mysql insert on update
    Java Mail 异常
    HDU_5456_数位dp
    HDU_4734_数位dp
    POJ_1221_DP
    POJ_1050_最大子矩阵
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11321462.html
Copyright © 2020-2023  润新知