目录
函数
多个返回值
如果一个函数要有多个返回值,可按照返回值的顺序,写对应顺序的多个变量接收即可
变量之间用逗号隔开
支持不同类型的数据return
def test_return():
return 1, 'hello', True
x, y, z = test_return()
print(x) #1
print(y) #hello
print(z) #True
函数多种传参方式
位置参数
调用函数时根据函数定义的参数位置来传递参数
注意:传递的参数和定义的参数的顺序及个数必须一致
关键字参数
函数调用时通过“键=值”形式传递参数
作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序要求
注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
def fun(name, age, gender):
print(f'你的名字时{name},你的年龄是{age},你的性别是{gender}')
#位置参数
fun('tom', 12, '女')
#关键字参数
fun(name = '小明', age=12,gender='男')
缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传默认参数的值
注意:所有位置参数必须出现在默认参数之前(即默认参数值必须在最后),包括函数地定义和调用
作用:当调用函数时没有传递参数,就会使用默认时用缺省参数对应的值
def fun(name, age, gender = '男'):
print(f'你的名字时{name},你的年龄是{age},你的性别是{gender}')
fun('tom', 12) #你的名字时tom,你的年龄是12,你的性别是男
fun('jerrt',13,'女') #你的名字时jerrt,你的年龄是13,你的性别是女
不定长参数
不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
作用:当调用函数时不确定参数个数时,可以使用不定长参数
不定长参数类型:
① 位置传递
注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型,这就是位置传递
② 关键字传递
注意:参数是“键 = 值”形式的情况下,所有的“键 = 值”都会被kwargs接受,同时会根据“键 = 值”组成字典
# 位置传递的不定长
def fun(*args):
print(args)
fun('tom') #('tom',)
fun('tom',18) #('tom', 18)
# 关键字传递的不定长
def fun1(**kwargs):
print(kwargs)
fun1(name= 'tom', age = 18, id = 110) #{'name': 'tom', 'age': 18, 'id': 110}
匿名函数
函数作为参数传递
这是一种计算逻辑的传递,而非数据的传递
def test_func(fun):
result = fun(1,2)
print(type(fun)) #<class 'function'>
print(result) #3
def compute(x,y):
return x + y
test_func(compute)
lambda匿名函数
函数定义中:
def关键字,可以定义带有名称的函数,可重复使用
lambda关键字,可以定义匿名函数(无名称),只可临时使用一次
匿名函数定义语法:
lambda 传入参数:函数体(一行代码)
- lambda是关键字,表示定义匿名函数
- 传入参数表示匿名的形式参数,如:x ,y表示接收两个形式参数
- 函数体内,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码
def test_func(fun):
result = fun(1,2)
print(result) #3
test_func(lambda x, y: x + y)
文件操作
模式 | 描述 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头,这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 |
w | 打开一个文只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有的内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从头开始编辑,即原有内容会被编辑。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已经存在则打开文件,并从头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从头开始编写,即原有内容将会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件用于读写。 |
打开读取文件
① 打开文件
函数:open( name, mode, encoding )
name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
mode: 设置打开文件的模式(访问模式):只读,写入,追加等
encoding: 编码格式(推荐使用UTF-8)
注意:'f'是'open'函数的文件对象。
② read()
语法:文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
f = open('1.txt', 'r', encoding='UTF-8')
print(f.read(10))
#abc
# efg
# hi
③ readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
f = open('1.txt', 'r', encoding='UTF-8')
s = f.readlines()
print(type(s)) #<class 'list'>
print(s) #['abc\n', 'efg\n', 'hij']
④ readline()
一次读取一行内容
f = open('1.txt', 'r', encoding='UTF-8')
print(f.readline()) #abc
print(f.readline())#efg
print(f.readline())#hij
⑤ 文件的读取(for循环)
for line in f:
print(line)
⑥ close()
⑦ with open
语法:with open( ’pythontxt‘, 'r' ) as f:
f.readlines()
通过在with open的语句块中对文件进行操作,可以在操作完成之后自动关闭close文件,避免遗忘掉close方法
写操作
文件对象 = open(’文件名或文件地址‘, 'w')
文件对象.write( 内容 )
文件对象.flush()
注意:
- 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
- 当调用flush的时候,内容会真正写入文件
- 这样做是避免频繁的操作硬盘,导致效率下降
- close()方法,带有flush()方法的功能
追加写入操作
文件对象 = open(’文件名或文件地址‘, 'a')
文件对象.write( 内容 )
文件对象.flush()