1、递归函数
函数内调用自己本身函数,就叫做递归函数。
计算一个数字的阶乘n!=1*2*3*4*......*n
公式演变:
n! = 1 * 2 * 3 * 4 * ...... * (n - 2) * (n - 1) * n
= n * (n - 1) * (n - 2) * ...... * 4 * 3 * 2 * 1
= n * (n - 1)!
注意:
1、在函数的内部调用自己本身。
2、递归函数本质是一个方法的循环调用。有可能出现死循环。
3、一定要定义递归的边界(什么时候退出循环)
def factorial(n):
if n < 0:
print("负数没有阶乘")
elif n == 0 or n == 1:
#定义函数的终止条件
return 1
else:
#定义函数的阶乘
return n * factorial(n - 1)
a = factorial(10)
print(a)
2、匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。lambda函数的语法只包含一个语句:
lambda [arg1 [, arg2, ......, argn]]:expression # lambda 参数 : 表达式
例如:
普通的函数实现一个简单的加法。
def add(a, b):
return a + b
print(add(11, 22))
使用匿名函数的方式实现一个简单的加法:
func = lambda x, y : x + y
print(func(11, 22)) #func虽然是一个变量,但是就相当于是一个函数了
常用招数-使用匿名函数方式实现动态函数:
def test(a, b, fuction):
result = function(a, b) #在此函数里面,并未指定对a,b两个变量的操作方式,最终的结果与传入的匿名函数的实现方式为结果
return result
print(11, 22, lambda x, y : x + y) #此处传入的匿名函数对a, b两个参数的操作为执行相加
list.sort(key=None,reverse=False) #排序函数,有两个默认参数,key是指定按照什么参数来进行排序,reverse是指定按升序还是降序,True为降序,False为升序
例如:
nums=[1, 3, 6, 2, 4]
nums.sort() #如果不带参数,则代表sort()函数会取出nums当中每个元素,赋值给key,然后做对比排序。由于列表当中的元素是数字类型,所以是可以比对大小进行排序的。
然而如果列表当中的值是一个一个的字典呢?
stus=[{"name":"zs", "age":"10"},{"name":"ls", "age":"30"},{"name":"ww", "age":"20"}]
如果调用stus.sort()则会报错。因为字典与字典之间无法进行对比排序,比如{"name":"zs", "age":"10"}和{"name":"ls", "age":"30"}是完全无法比对的。
然而字典之间的比对,我们一般不是通过字典本身来进行比对排序,是通过字典内的某一个值进行排序,这种情况下应该怎么办呢?
因为sort()函数在比对时,会将每个值取出,赋值给key,那么在比对数值类型的列表的时候,key就是一个变量,特别方便比较。而如果key被人为的指定成了一个匿名函数呢?当key被赋值成一个字典的时候,是不是就可以通过匿名方法的参数,获取到这个字典,然后再通过表达式取出字典当中的某一个值后,再重新赋值给key,这样就可以进行比较了。
例如:
stus.sort(key = lambda x : x["name"]) #通过匿名函数取出字典变量当中的name值作对较
stus.sort(key = lambda x : x["age"]) #通过匿名函数取出字典变量当中的age值作对较
在上述的例子当中,虽然实现了函数的动态,但是整个程序却是死的,代码执行结果永远固定不变,那么怎么实现由用户输入指令呢?
def test(a, b, fuction):
result = function(a, b)
return result
func=input("请输入") #在python2当中,这样就可以了
func_new=eval(func) #由于在python3当中输入的内容全部被当成字符串,所以需要使用eval函数进行转换
print(11, 22, func_new)
那么lambda x, y : x + y则是由用户输入,则实现了动态程序。
3、数据交换
a=11
b=22
a,b=b,a
可变类型不能作为字典的key
作者:沧水巫云
博客:http://blog.youkuaiyun.com/amir_zt/
以上原创,转载请注明出处,谢谢。
https://blog.youkuaiyun.com/amir_zt/article/details/83090567