装饰器

不带参数

  1. def timmer(func):
  2. def wrapper():
  3. start_time = time.time()
  4. func()
  5. stop_time = time.time()
  6. print("运行时间是 %s 秒 " % (stop_time - start_time))
  7. return wrapper
  8. @timmer
  9. def i_can_sleep():
  10. time.sleep(3)

带参数

  1. def tips(func):
  2. def nei(a, b):
  3. print('start')
  4. func(a, b)
  5. print('stop')
  6. return 'I am here!!!!'
  7. return nei
  8. @tips
  9. def add(a, b):
  10. print(a+b)

给装饰器带参数

  1. def new_tips(argv):
  2. def tips(func):
  3. def nei(a, b):
  4. start_time = time.time()
  5. #这里加个变量接收返回值
  6. result = func(a, b)
  7. end_time = time.time()
  8. print('%s 运行时间: %s ' %(argv, end_time-start_time))
  9. #这里再返回
  10. return result
  11. return nei
  12. return tips
  13. @new_tips('sum_model')
  14. def sum(a, b):
  15. return a+b
  16. @new_tips('sub_model')
  17. def sub(a, b):
  18. return a-b

文件操作

open

语法file object = open(file_name [, access_mode][, buffering])

  • file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
  • access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
  • buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

    1. # 读取文件内容
    2. def readfile(file_name = 'name.txt'):
    3. file2 = open(file_name)
    4. str = file2.read()
    5. file2.close()
    6. return str

    write

  • write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

  • write()方法不会在字符串的结尾添加换行符(‘\n’):
  • 参数 w : 写入 a : 追加 ```python

    写入文件内容

    def writefile(file_name = ‘name.txt’, txt = ‘’): file1 = open(file_name, ‘w’) file1.write(txt) file1.close()

追加文件内容

def appendfile(file_name = ‘name.txt’, txt = ‘’): file1 = open(file_name, ‘a’) file1.write(txt) file1.close()

  1. <a name="fB41C"></a>
  2. ### read
  3. 语法:`fileObject.read([count])`
  4. - 方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
  5. ```python
  6. # 读取文件内容
  7. def readfile(file_name = 'name.txt'):
  8. file2 = open(file_name)
  9. str = file2.read()
  10. file2.close()
  11. return str

readline & readlines

  • readline 读取一行
  • readlines 读取每行 ```python

    读取一行

    def readfileline(file_name = ‘name.txt’): file4 = open(file_name) str = file4.readline() file4.close() return str

读取每行

def readfilelines(file_name = ‘name.txt’): file5 = open(file_name) print(“====读取每行====”) for line in file5.readlines(): print(line) print(“===============”) file5.close()

  1. <a name="udY5Q"></a>
  2. ### seek
  3. - `tell() `方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。
  4. - `seek(offset [,from])`方法改变当前文件的位置。Offset 变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
  5. - 如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
  6. ```python
  7. # 打印当前位置,和读取个数
  8. def readfilecurrent(file, num = 1):
  9. print('当前文件指针的位置 %s' % file.tell())
  10. print('当前读取到了一个字符,字符的内容是 %s' % file.read(num))
  11. print('当前文件指针的位置 %s' % file.tell())
  1. def file_func():
  2. # 写入文件
  3. writefile(txt = 'a.诸葛亮')
  4. # 读取文件
  5. print(f"读取文件内容: {readfile()}")
  6. # 增加内容
  7. appendfile(txt = '\nb.刘备')
  8. # 读取 1 行
  9. print("读取 1 行", readfileline())
  10. # 读取每行
  11. readfilelines()
  12. file6 = open('name.txt')
  13. readfilecurrent(file6, num=1)
  14. # 第一个参数代表偏移位置,第二个参数 0 表示从文件开头偏移 1表示从当前位置偏移, 2 从文件结尾
  15. file6.seek(5, 0)
  16. readfilecurrent(file6, num=1)
  17. file6.close()
  18. def main():
  19. file_func()
  20. if __name__ == '__main__':
  21. main()

参考