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

眉间皱痕 提交于 2020-03-18 21:53:34

 

文件的高级应用

 

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'\xe4\xb8\xad'
truncate字节with open('test.py', 'a', encoding='utf8') as fr:    fr.truncate(7)  以上四个方法可以用,但没有必要文件修改的两种方式
文件没有修改这一说,只有覆盖这一说
1)一次性读取所有在内容import oswith 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 oswith 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:未来写一个开车函数    passprint(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
函数的调用函数如果没有返回值的话看,会默认返回nonedef max_self(x, y):    if x > y:
        return x    else:        return y1)max_self(1, 2)2)res = max_self(1, 2) * 123)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个# 需要的用的时候用,一般用位置形参+位置实参
 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!