大数协python训练营打卡笔记Task06

一、学习知识点概要

(一)函数(定义、调用、函数文档、函数参数、函数返回值、变量作用域)

(二)Lambda表达式(匿名函数的定义、应用、)

二、学习内容

(一)函数

1.函数的定义

【在 Python 里有两类函数:

  • 第一类:用def关键词定义的正规函数

  • 第二类:用lambda关键词定义的匿名函数】

①以def关键词开头,后接函数名和圆括号()。

②函数执行的代码以冒号起始,并且缩进。

③return[表达式]结束函数,选择性地返回一个值给调用方。

def div(x,y):
    return x/y

 ④不带表达式的return相当于返回None。

2.函数的调用

3.函数文档

形式参数和实际参数

4.函数参数

大数协python训练营打卡笔记Task06

 5.函数的返回值

 6.变量作用域

①Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的

②定义在函数内部的变量拥有局部作用域,该变量称为局部变量

③定义在函数外部的变量拥有全局作用域,该变量称为全局变量

④局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

⑤当内部作用域想修改外部作用域的变量时,就要用到关键字global和nonlocal:

        (1)内嵌函数

        (2)闭包(闭包的返回值通常是函数)

                1.是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。

                2.如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。

                3.通过闭包可以访问外层非全局作用域的变量,这个作用域称为闭包作用域

                4.如果要修改闭包作用域中的变量则需要关键字nonlocal。

        (3)递归:如果一个函数在内部调用自身本身,这个函数就是递归函数。(斐波那契数列、设置递归层数)

(二)Lambda表达式

1.匿名函数的定义

python 使用lambda关键词来创建匿名函数,而非def关键词,它没有函数名,其语法结构如下:

lambda argument_list: expression

①lambda - 定义匿名函数的关键词。

②argument_list - 函数参数,它们可以是位置参数、默认参数、关键字参数,和正规函数里的参数类型一样。

:- 冒号,在函数参数和表达式中间要加个冒号。

④expression - 只是一个表达式,输入函数参数,输出一些值。

注意:

①expression 中没有 return 语句,因为 lambda 不需要它来返回,表达式本身结果就是返回值。

②匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

2.匿名函数的应用

函数式编程 是指代码中每一块都是不可变的,都由纯函数的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。(非函数式编程、函数式编程)

大数协python训练营打卡笔记Task06

三、学习问题与解答(课后题)

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

def MyFirstFunction(name):
    "name是形参"
    print('传递进来的{0}是具体值'.format(name))
MyFirstFunction('aaa')
print(MyFirstFunction.__doc__)
help(MyFirstFunction)

2. 怎么给函数参数和返回值注解?

不清楚……

3.闭包中,怎么对数字、字符串、元组等不可变元素更新。

需要nonlocal关键字进行修改。

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

a = [[6, 5], [3, 7], [2, 8]]
a.sort(key=lambda x:x[0])
print(a)
#[[2, 8], [3, 7], [6, 5]]
a = [[6, 5], [3, 7], [2, 8]]
a.sort(key=lambda x:x[1])
print(a)
#[[6, 5], [3, 7], [2, 8]]

 5.利用python解决汉诺塔问题?

参考了文档中的链接:技术图文:如何实现汉诺塔问题? (qq.com)

实际上是今天所学的递归问题的一种,编写了函数move进行移动的分析。

四、学习思考与总结

1.第一次看完整个文档的时候还是一头雾水,写完笔记之后重新完整地过了一遍才比较建立起思维网络,但实际上好像还没有做到真正地应用起来。

2.本次学习加笔记时间大概五个小时左右。

3.很感谢能有这样一次较为系统地学习python的机会,虽然只是非常基础的一些内容,但好歹也逼着自己跟上其他人的步伐,每天认认真真地学一点新的内容,不懂的自己查百度、看视频,加深理解和印象。

4.有几篇笔记很荣幸地被表扬了,很感谢群里的师兄师姐还有小伙伴们,祝大家都开心快乐,期末加油!

上一篇:Java基础 lambda表达式


下一篇:普歌 - lambda表达式详解