Python编程基础_03
函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| ''' 基础使用 ''' # 必须先载入函数才能调用 def select_func(): print('test') select_func() def trapezoidal_area(a, b, h): '''第一行一般写说明',养成良好的编程习惯 此函数为计算梯形面积,a b h,上底下底高; ''' return ((a + b) * h / 2) print(trapezoidal_area(1, 2, 3)) ''' 局部变量和全局变量 ''' a = 100 # 定义一个全局变量 def test(h): global a # 全局变量在函数里不声明不能修改,但可以调用 a = 50 b = 200 # 此处是局部变量 print(h, a, b) test(1) test(trapezoidal_area(1, 2, 3)) # 函数可以进行嵌套 print(a) ''' 返回类型 ''' def return_num(): return 1, 2 print(type(return_num())) # 返回多个值的时候默认是元组类型 print(return_num()) ''' 缺省参数 ''' def user_info(name, gender, age=18): # 可以提前定义默认值,这样传参没有该参数的时候不会报错,直接使用默认参数 print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}') user_info('Rose', gender='女') # 有默认值可以不传参 user_info('小明', gender='男', age=16) # 函数调用,通过“键=值”形式加以指定。这样没有顺序需求。 ''' 不定长参数 不定长参数也叫可变参数。 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。 此时,可用包裹(packing)位置参数 或者包裹关键字参数,来进行参数传递,会显得非常方便。 ''' #包裹位置传递 def user_info02(*args): print(args) # ('TOM',) user_info02('TOM') # ('TOM', 18) user_info02('TOM', 18) # 包裹关键字传递 def user_info03(**kwargs): print(kwargs) print(type(kwargs)) # 字典类型 # {'name': 'TOM', 'age': 18, 'id': 110} user_info03(name='TOM', age=18, id=110) # 以上两个都是组包的过程 def return_num(): return 100, 200 num1, num2 = return_num() print(num1) # 100 print(num2) # 200 # 拿到数据后可以进行解包 num1, num2 = num2, num1 print(num1) # 200 print(num2) # 100 # python交换数据时除了常用的中间变量法,可以直接进行交换 #斐波那契数列 def fn(n): if n == 1 or n == 2: return 1 re = {1: 1, 2: 1} for i in range(3, n + 1): re[i] = re[i - 1] + re[i - 2] return re[n] print(fn(9)) ''' 所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变. 可变类型 列表 字典 集合 不可变类型 整型 浮点型 字符串 元组 ''' # lambda函数实现 fn1 = lambda a, b: a + b # 一行写完,不换行 print(fn1(1, 2))
|
文件操作
模式
描述
r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+
打开一个文件用于读写。文件指针将会放在文件的开头。
rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
补充:操作文本文件,如txt用普通方式打开即可。操作图片、音频、视频文件则用带b的二进制模式打开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def demo01(): # 基本操作 # 1. 打开文件 f = open('C:/Users/Administrator/Desktop/test.txt', 'w+') # 可以是相对路径也可以是绝对路径 # 2. 文件写入 f.write('hello world001\nhello world002\nhello world003') print(f.tell()) # 返回当前读取文件指针所在的位置,以数字返回。 # 4. 移动指针 f.seek(0) # 微调读取文件的指针:第二个参数0表示从开头开始读,第一个参数2表示从头开始跳 2个字节后开始读。 print(f.tell()) # 5. 读入文件 print(f.readline()) # 每次只读一行. f.seek(0) print(f.readlines()) # 读取所有文件,按一行读取,以列表形式返回,每一行为列表的一个元素。 f.seek(0) print(f.read()) # 读取文件的所有内容,以字符串形式返回。 # 6. 关闭文件 f.close() demo01() ''' seek() 方法用于移动文件读取指针到指定位置。 fileObject.seek(offset[, whence]) 参数 offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。 whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。 '''
|
注意:
-
w
和a
模式:如果文件不存在则创建该文件;如果文件存在,w
模式先清空再写入,a
模式直接末尾追加。
-
r
模式:如果文件不存在则报错。
1 2 3 4 5 6 7 8 9 10 11 12 13
| def backup(path): '在文件所在目录备份一个文件,并在文件头部加上备份二字,文件名后面加上[备份]' tup01 = path.partition('.') new_path = tup01[0] + '[backup]' + tup01[1] + tup01[2] f1 = open(path, 'a+') f2 = open(new_path, 'w+') f1.seek(0) temp = f1.read() f2.write(temp) f1.close() f2.close() return 'ok' backup("C:/Users/Administrator/Desktop/test.txt")
|