【python学习】函数与Lambda表达式

一、 理论部分

这次的blog是关于函数的,函数本身就是一个很大的主题,展开写的话三天三夜都说不完,那还是写简单点吧。

首先,python的函数还是一如既往的灵活。定义函数的时候不必指明函数的返回类型,而且返回值也可以有多个。参数表可以写的很灵活,且同样不必指明类型。
而Lambda表达式则提供了一种不用专门定义函数就可以直接使用函数的功能,个人认为这个有点像C语言中的宏。具体用法为:

lambda 参数1,参数2,…: 要返回值的表达式(表达式可以是求值的也可以是条件判断的。
										比如:x ** 2或 x % 2 == 1 均可)

二、练习

1.分别根据每一行的首元素和尾元素大小分别对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)

思路:sort()函数中提供了key参数,可以设定比较对象。这里就用lambda函数的返回值提供比较对象,该函数接受一个列表作为参数,返回列表的首元素或尾元素。

a = [[6, 5], [3, 7], [2, 8]]
a.sort(key = lambda lst: lst[0])	#根据首元素排序,函数返回列表首元素给key
print(a)
a.sort(key = lambda lst: lst[1])	#根据尾元素排序,函数返回列表尾元素给key
print(a)

output:

[[2, 8], [3, 7], [6, 5]]
[[6, 5], [3, 7], [2, 8]]

2.利用python解决汉诺塔问题

有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)

思路:经典的递归问题,不多做解释了,用python写注意细节即可。

def hanota(n):
    def move(des, temp, goal, n):
        if n > 0:	#注意递归边界
            move(des, goal, temp, n - 1)
            global step	#使用外部定义好的全局变量
            step += 1
            print("第%d步:将%d号圆盘从%s柱移至%s柱" % (step, n, des, goal))
            move(temp, des, goal, n - 1)
    move('A', 'B', 'C', n)

n = input("请输入汉诺塔问题的规模(建议不要超过10): ")
step = 0
hanota(int(n))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值