Python:Task06:函数与Lambda表达式

Task06:函数与Lambda表达式

def 函数名(形参):

​ 巴拉巴拉

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

默认参数:一定要放在位置参数 后面,不然程序会报错。 def printinfo(name , age = 8) age是默认参数,没有赋值的时候是8,赋值了以后是赋值的值。

个数可变位置参数:*XXX,任意个数,自动组装成元组。就是不知道元素的个数。

个数可变的关键字形参:**XXX,任意个数,组成字典。

def medef(*a,**b):
    print(a,b)

medef(10,20,30,a=10,b=20)

#位置参数和关键字参数都只能有一个,前面所有的都会放入位置形参中,关键字形参是 = 形式

#
(10, 20, 30) {
    
    'a': 10, 'b': 20}

命名的关键字参数:*, XXX ,调用时必须要和形参名字一样才能赋值。

def mee(*,nkw):
    print(nkw)

mee(nkw = 10)

#
10

顺序:位置参数、默认参数、可变参数(*args-tuple)、命名关键字参数( *,XXX)和关键字参数(**XXX-dict)

内部想修改外部变量的时候:

num = 1
def fun1():
    global num     
    # 内部想修改外部变量时,需要使用 global 关键字声明,后面变量就全是修改后的值了
    num = 123
    print(num)
fun1()
print(num)

#
123
1

内嵌函数:A函数中的函数只能在A函数中调用

闭包:

保证安全,外部不能访问变量

内部函数调用了外部变量(一般不是全局变量)

外层函数返回值是函数

def meoutter(x):
    num = 10

    def meintter(y):
        nonlocal num        #闭包中修改外部变量用nonlocal
        num = 100
        print(num)
        return x*y

    print(num)
    return meintter

i = meoutter(3)            #先给外部赋值
print(i(4))                #  

#
10
100
12

匿名函数定义:

lambda 形参 : 表达式

非函数式编程:(加减循环…)

def f(x):
    for i in range(0,len(x)):
        x[i] +=10
    return x
x = [1,2,3]
f(x)
print(x)

函数式编程:(调用相关函数)

def f(x):
    y = []
    for item in x:
        y.append(item + 10)
    return y
x = [1,2,3]
f(x)
print(x)

练习题:

  1. 怎么给函数编写⽂档?

    def f(x):
        "在函数头(包含def关键字的那一行)的下一行用一对单引号或双引号将注释括起来。可以使用'函数名.__doc__'或help()查看"
        print(f.__doc__)
        print(help())
        
    
  2. 怎么给函数参数和返回值注解?

    def f(x:int)->int:
    
  3. 闭包中,怎么对数字、字符串、元组等不可变元素更新。

    nonlocal

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

    a = [[6, 5], [3, 7], [2, 8]]
    a = sorted(a,key=lambda i:i[0])
    a = sorted(a,key=lambda i:i[-1])
    
  5. 利用python解决汉诺塔问题?

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

def f(a):
    new=list(reversed(a)) #颠倒
    return new
a=list(range(64))
c=f(f(a))                 #颠倒两次
print(c)

猜你喜欢

转载自blog.csdn.net/zhaohaobingniu/article/details/113701909