函数笔记
# 有带形参的 def test(x): ''' 2*x+1 :param x:整形数字 :return: 返回计算结果 ''' y=2*x+1 return y a=test(5) print(a)
# 不带形参的 def test(): ''' 2*x+1 :param x:整形数字 :return: 返回计算结果 ''' x=3 #x取固定值 y=2*x+1 return y a=test() print(a)
函数的返回值;
def test01(): msg = 'test01' print(msg) def test02(): msg = 'test02' print(msg) return msg def test03(): msg = 'test03' print(msg) return 1,2,3,4,'a',['alex'],{'name':'alex'},None def test04(): msg = 'test03' print(msg) return {'name':'alex'} t1=test01() t2=test02() t3=test03() t4=test04() print("没有返回值,函数结果None:",t1) print("有返回值",t2) print("多种返回值当成一个元组输出:",t3) print("单个返回值显示它本身:",t4)
实例结果;
test01 test02 test03 test03 没有返回值,函数结果None: None 有返回值 test02 多种返回值当成一个元组输出: (1, 2, 3, 4, 'a', ['alex'], {'name': 'alex'}, None) 单个返回值显示它本身: {'name': 'alex'}
形参和实参:
# 其中calc(x,y)的x,y表示形参 def calc(x,y): res = x**y return res # return x #返回值是函数中实参的值 # return y res=calc(2,4)#x=2,y=3 print(res) # 用a,b等于实际的值,表示实参 a=10 b=10 res=calc(a,b) print(res)
结果:
16 10000000000
位置参数和关键字参数的区别:
def test(x,y,z): print(x) print(y) print(z) #位置参数,必须一一对应,缺一不行多一也不行 test(1,2,3)#x=1,y=2,z=3 #关键字参数,无须一一对应,缺一不行多一也不行 test(y=1,x=3,z=4) # test(1,y=2,3)#报错,位置参数要在关键字参数左边 # test(1,3,y=2)#报错,关键字参数与位置参数不符合 test(1,3,z=2) # test(1,3,z=2,y=4)#报错,关键字参数重复 # test(z=2,1,3)#报错,关键字参数与位置参数不符合
结果
1 2 3 3 1 4 1 3 2
默认参数的函数
def handle(x,type='mysql'): print(x) print(type) handle('hello')#没有输入type的值默认type='mysql' handle('hello',type='sqlite')#新的type值覆盖原来的值 handle('hello','sqlite') #按照顺序一一对应
结果
hello
mysql
hello
sqlite
hello
sqlite
参数组:**字典 *列表
def test(x,*args): print(x) print(args) test(1) test(1,2,3,4,5) test(1,{'name':'alex'}) test(1,['x','y','z']) test(1,*['x','y','z']) test(1,*('x','y','z'))
结果
1 () 1 (2, 3, 4, 5) 1 ({'name': 'alex'},) 1 (['x', 'y', 'z'],) 1 ('x', 'y', 'z') 1 ('x', 'y', 'z')
def test(x,**kwargs): print(x) print(kwargs) test(1,y=2,z=3) # test(1,1,2,2,2,2,2,y=2,z=3)#报错,位置参数不够 # test(1,y=2,z=3,z=3)#会报错 :一个参数不能传两个值
结果
1 {'y': 2, 'z': 3}
使用*args,**kwargs可以传入任何类型
def test(x,*args,**kwargs): print(x) print(args,args[-1]) print(kwargs,kwargs.get('y')) # test(1,1,2,1,1,11,1,x=1,y=2,z=3) #报错,由于x=1和x重复传入 test(1,1,2,1,1,11,1,y=2,z=3) test(1,*[1,2,3],**{'y':1})
结果
1 (1, 2, 1, 1, 11, 1) 1 {'y': 2, 'z': 3} 2 1 (1, 2, 3) 3 {'y': 1} 1