ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-12-05 16:00:35  阅读:191  来源: 互联网

标签:闭包 函数 函数参数 python 作用域 打卡 Task06 变量 lambda


一、学习知识点概要

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

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

二、学习内容

(一)函数

1.函数的定义

【在 Python 里有两类函数:

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

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

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

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

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

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

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

2.函数的调用

3.函数文档

形式参数和实际参数

4.函数参数

 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.匿名函数的应用

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

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

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

标签:闭包,函数,函数参数,python,作用域,打卡,Task06,变量,lambda
来源: https://blog.csdn.net/Slender_X/article/details/121729219

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有