函数
定义:
将一段程序封装起来,以备用时只需
可以使代码形成一定的模块化.
规范
- 函数定义必须以def开头,函数名,参数,冒号
- 函数定义的下一行必须有缩进
- 只定义会报错,写占位符pass,避免语法错误
def sumdata(a,b):
print(a+b)
pass #占位符
sumdata(7,5) #函数的调用
对比:
a=7
b=5
print(a+b)
关于return 和return之后的语句
def sumdata(a,b):
#函数返回值return语句不是必须的,但是没有return就没有返回值。
return a+b
print("此句不执行,不可达语句")
print(sumdata(30,10))
函数中可以出现多个return吗?
#写一个函数,它可以返回任意数字的绝对值
#函数中,可以出现多个return,但必须位于不同的分支里面,否则后面的return无效
def jueduizhi(a):
if a >=0:
return a
else:
return -a
print(jueduizhi(-2))
return可以出现多个值吗?会以元组的形式返回每一个值.
#写一个函数可以返回某数的平方,三次方,平方根
def fun1(a):
return a**2,a**3,a**0.5
或者:
return [a**2,a**3,a**0.5] #此时这是一个返回值
print(fun1(4))
(16, 64, 2.0)
函数
函数的嵌套
def foo():
def inner():
print(123)
return inner() 调用会被打印出来
foo()
函数的参数
def sumdata(a,b): #a,b 形式参数,简称形参
return a+b
print(sumdata(2,3) ) #实际参数,简称实参
print(sumdata(a=2,b=3)
print(sumdata(b=3,a=2) 当使用完整写法时,参数的顺序可以调换
print(sumdata(2,b-3)
错误写法
print(sumdata(a=2,3)
#间隔符 sep = ’ ', 终止符end = ‘\n’, file = None
print(1,2,3)
print(4)
1 2 3
4
函数的缺省值,当用户输入的时候,按照用户输入的为准
print(1,23,3,sep=’@’,end="")
print(“不换行”)
1@23@3不换行
关于参数:
def sumdata(a,b,c=100):
return a+b+c
print(sumdata(10,20))
print(sumdata(10,20,80))
130
110
#可变长度参数,可以传入若干个参数
def sumdata(*args):
return args
print(sumdata()) #一个空的元组
print(sumdata(22,2))
()
(22, 2)
*args和args的区别
def sumdata(a,*args):
return (a,*args) 这块,不会多一层元组
# print(sumdata()) #一个空的元组
print(sumdata(22,[7,8],2,3,2,1))
(22, [7, 8], 2, 3, 2, 1)
def sumdata(a,*args):
return (a,args) # 这块无*.打印结果会多出一个*号,会多一层元组
# print(sumdata()) #一个空的元组
print(sumdata(22,[7,8],2,3,2,1))
(22, ([7, 8], 2, 3, 2, 1))
关键字参数:**kwargs ,它是一个字典,也可以是任意个值,但必须成对出现
def fun2(a,**kwargs):
return a,kwargs
print(fun2(100,A=2,B=4,C="zifuchuan"))
print(fun2(100))
(100, {'A': 2, 'B': 4, 'C': 'zifuchuan'})
(100, {})
如果有**kwargs,它必须位于 *args的后面
def fun3(a,*args,**kwargs):
return a,args,kwargs
print(fun3(3,4,5,6,a2=22))
(3, (4, 5, 6), {'a2': 22})