函数从某种角度来讲也是一种控制流程,这种控制流程的特点在于函数更加的灵活。
1 函数的定义
//函数定义语法
//def 函数名 (形参) : 函数体
def my_abs(x):
if x >= 0:
return x
else:
return -x
def myPrint():
print("今天你吃饭没")
myPrint()
今天你吃饭没
定义函数时,需要确定函数名和参数的个数。也可以不传入参数。
函数体内部可以用return随时返回结果,函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是将多个返回值打包成为了一个tuple。
2 函数调用
函数调用有那种方式,直接调用和间接调用。
>>> n = abs //直接调用
>>> n(-2)
2
>>> abs(-2) //间接调用
2
3 函数参数
//命名关键字参数,作用限制关键字参数的名字。使用*进行分隔
def person(name, age, *, city, job):
print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
//如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
函数参数具有多种类型(从函数形参来看):位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合
//其中x便是位置参数,占有函数实参的位置
def power(x):
return x * x
//默认参数
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
//n=2,便为默认参数,默认参数可以简化函数的调用
//.......python在进行定义时,默认参数的值已经被计算出来了,如果默认参数中的值被改变,下次调用时函数值已发生改变
//可变参数,传入的参数是可变的
def fun(n, *args): #将多余的数据打包成数组
print(n)
print(args) # 未拆包
print(*args) # 进行拆包
fun(1,2,3,4)
输出:
1
(2, 3, 4)
2 3 4
//关键字参数 **kwargs,用于接收形参的命名参数
def fun(**kwargs): #打包
print(kwargs) #未拆包
print(*kwargs) # 进行拆包
fun(a=1, b=2)
输出:
{'a': 1, 'b': 2}
a b