Task6:函数与Lambda表达式

函数

  • 定义
def functionname(parameters):
	"函数_文档字符串"
    function_suite
    return [expression]

定义空函数:

def ept_func():
	pass
  • 函数调用
    e.g.
    def my_abs(x):
        if x >= 0 :
            return x
        else:
            return -x
            
    print(my_abs(10))	# 10
    

函数的参数

  • 位置参数
    这些参数在调用函数 (call function) 时位置要固定。
    e.g.

    def funcname(x):
    	 return x
    

    在调用funcname时,必须传入有切仅有一个的参数x。

  • 默认参数

    • 默认参数 = 默认值,调用函数时,默认参数的值如果没有传入,则被认为是默认值。
      e.g.
    def example(x, n = 1):
    	i=1
    	while n > 0:
    		n = n - 1
    		i = i * x
    	return i
    

    : 默认参数一定要放在位置参数后面,不然程序会报错。

    • Python 允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    e.g.

    def printinfo(name, age):
    	 print('Name:{0},Age:{1}'.format(name, age))
    
    printinfo(age=8, name='小马')  # Name:小马,Age:8
    
  • 可变参数
    可变参数传入的参数个数是可变的,是不定长的参数。
    e.g.

    def cal(numbers):
        sum = 0
        for n in numbers :
            sum = sum + n
        return sum
    cal([1,2,3])  # 6
    

    e.g.

    def printinfo(arg1, *args):
        print(arg1)
        for var in args:
            print(var)
    
    printinfo(10)  # 10
    printinfo(70, 60, 50)
    
    # 70
    # 60
    # 50
    
  • 关键字参数
    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

    def functionname(arg1, arg2=v, *args, **kw):
        "函数_文档字符串"
        function_suite
        return [expression]
    

    e.g.

    def printinfo(arg1, *args, **kwargs):
        print(arg1)
        print(args)
        print(kwargs)
    
    printinfo(60,70,50)
    # 60
    # (70, 50)
    # {}
    printinfo(60,70,a=1,b=2)
    # 60
    # (70,)
    # {'a': 1, 'b': 2}
    
    • 可变参数允许传入零个到任意个参数,它们在函数调用时自动组装为一个元组 (tuple)。
    • 关键字参数允许传入零个到任意个参数,它们在函数内部自动组装为一个字典 (dict)。
  • 命名关键字参数
    对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
    如果要限制关键字参数的名字,就可以用命名关键字参数。

    def functionname(arg1, arg2=v, *args, *, nkw, **kw):
        "函数_文档字符串"
        function_suite
        return [expression]
    
    • *, nkw - 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符 *。
    • 如果要限制关键字参数的名字,就可以用「命名关键字参数」
    • 使用命名关键字参数时,要特别注意不能缺少参数名。
    def person(name, age, *, city, job):
    	print(name, age, city,job)
    
    person('Jack', 12, city = 'beijing', job = 'student')
    # Jack 12 beijing student
    
  • 参数组合
    在 Python 中定义函数,可以用位置参数、默认参数、可变参数、命名关键字参数和关键字参数,这 5 种参数中的 4 个都可以一起使用,但是注意,参数定义的顺序必须是:
    位置参数、默认参数、可变参数和关键字参数。
    位置参数、默认参数、命名关键字参数和关键字参数。

    要注意定义可变参数和关键字参数的语法:

    • *args 是可变参数,args 接收的是一个 tuple
    • **kw 是关键字参数,kw 接收的是一个 dict
  • 递归
    e.g. 解决汉诺塔问题

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

    def move(n, a, b, c):
        if n == 1:
            print('move', a, '-->',c)
        else:
            move(n-1, a, c, b)
            move(1, a, b, c)
            move(n-1, b, a, c)
        
    move(64, 'A', 'B', 'C')
    
    

Lambda表达式

当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
lambda argument_list: expression
其中,lambda是定义匿名函数的关键字,argument_list是函数参数,类型和正规函数的参数类型一样。
冒号: 在函数函数参数和表达式中间要加冒号。
expression,是表达式,输入函数参数,输出值。
:expression中没有return语句,是因为lambda表达式本身的结果就是返回值。
匿名函数拥有自己的命名空间,且不能访问自己参数列表意外或全名空间里的参数。
e.g.

def sq(x):
	return x*x
map(sq,[y for y in range(10)])

# lambda
map(lambda x: x*x, [y for y in range(10)])

lambda可以像正常函数一样调用,也可以作为参数传递给其他的函数,也可以嵌套在普通函数中,它使得代码更加的简洁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值