函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提供应用的模块性和代码的重用性,python内置了很多函数(例如:print()等),用户也可以自定义函数,通过def关键字来定义一个函数可以选择性的传入参数在函数内部进行处理,以return来返回一个值给调用者,如果没有return返回值默认为None,函数的定义语法为:
def 函数名([参数]):
代码块
return 返回值
def a (s):
print(s)
a(10)
10
创建一个a函数,调用之后把10作为函数传给函数,执行后会打印出一个10
函数返回值的调用:将1作为参数传给函数,用变量b接收函数的返回值,执行结果为1是因为函数中的print方法打印出的结果,b的实际值是10
>>> def a (s):
print (s)
return 10
>>> b = a(1)
1
>>> print (b)
10
装包与解包:很多时候我们可能不知道要传几个参数给函数,在定义函数的时候可以在参数的位置的写一个'*args'来表示这是一个不定长参数,例如:
def a (*args): #参数这里写'*args',调用的时候传了3个数字
print(args)
>>> a(1,2,3)
1 2 3
当我们在参数的位置写'*kargs'的时候则以键值对的形式返回,例如:
def a(**kwargs):
print(kwargs)
>>> a(a=1,b=2,c =3)
{'a': 1, 'b': 2, 'c': 3}
python中的高级函数:1.接收一个或多个函数作为参数 2.将函数作为返回值返回(闭包),满足任意一个特点就是高级函数,例如:
def a(i,j):
print(i(j))
def b(s):
s += 1
return s
>>> a(b,1)
2
上述的代码为定义了一个a()函数,需要接收i和j两个参数,其中i为一个方法,打印出j作为参数穿给i函数运算的结果,b()函数讲传进来的参数加1然后返回,将b和1作为参数传给a函数处理,执行结果相当于print(b(1))
def a(i):
i += 1
def b():
j = i + 1
return j
return b
>>> c = a(1)
>>> print(c())
3
上述代码为将函数作为返回值的用法,先定义函数a()接收参数i先做加1运算,然后在函数内部定义一个函数b(),再将i做加1运算并赋值给j(因为函数b是a的内部函数所以可以不用接收参数直接调用a函数的参数),b函数返回j,a函数返回b函数的运算结果,也就是返回了j,在打印结果的时候要注意用一个变量接收函数的运算结果并加()如果不加的话是打印这个函数在内存中的地址
匿名函数:一些简单的运算函数可以试用匿名函数的方式来完成,通过lambda关键字来定义,lambda 参数:运算,例如:
>>> def a (i,j):
return i+j
>>> a(1,2)
3
>>> f = lambda a,b:a+b
>>> f(1,2)
3
装饰器:本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,动态的为函数增加一些功能,装饰器的返回值也是一个函数对象,例如:
def start_end(func):
def new(*args,**kwargs):
print('开始执行.....')
result = func(*args,**kwargs)
print(result)
print('执行结束.....')
return result
return new
def a(i,j):
s = i +j
return s
>>> f = start_end(a)
>>> r = f(1,2)
开始执行.....
3
执行结束.....
如果你觉得太麻烦的话也可以用这种简单的方式,用@的方式来装饰需要动态增加功能的函数:
>>> def start_end(func):
def new(*args,**kwargs):
print ('开始执行.....')
result = func(*args,**kwargs)
print(result)
print('执行结束.....')
return result
return new
>>> @start_end
def a(i,j):
s = i + j
return s
>>> a(1,2)
开始执行.....
3
执行结束.....
------已更新完,后面可能会有补充,下一篇更新面向对象------