目录

1.函数类型

2. 匿名函数

3.传入函数(理解)

4.闭包

5.偏函数

6.变量的作用域

6.1 变量作用域的分类

6.2 变量作⽤域查找规则

6.3 全局变量和局部变量

6.4 global和nonlocal

函数填空题


1.函数类型

函数也是一种类型,我们自定义的函数就是函数对象,函数名保存了函数对象的引用(地址)

2. 匿名函数

不再使用def 函数名()这种形式定义函数,而是使⽤lambda来创建匿名函数
特点:

  • lambda只是一个表达式,函数体⽐def定义的函数简单的多
  • lambda的函数体不再是代码块,⽽是⼀个表达式
  • lambda只有⼀行,运行效率很高

语法:

3.传入函数(理解)

一个函数就可以接收另⼀个函数作为参数,这种函数就称之为高阶函数,也可以称之为传⼊函数。可以实现通用编程,排序等复杂功能

4.闭包

我们可以在⼀个函数中再定义一个函数,在函数内部定义的函数称之为内部函数,内部函数只能在函数内使用,不会污染外部空间。定义内部函数的函数称之为外部函数,这样的定义构成函数的嵌套

  • 内部函数只能在外部函数⾥调用,外界⽆法直接调⽤内部函数

在一个外部函数中定义了一个内部函数,内部函数⾥引⽤了外部函数的变量,并且外部函数的返回值是内函数的引用。这样内部函数和其执⾏所需的环境变量就构成了一个闭包。
一般情况下,如果⼀个函数结束,函数的内部所有东西都会释放掉,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有⾃己的局部变量将来会在内部函数中⽤到,就把这个局部变量绑定给了内部函数,然后⾃己再结束。

在闭包中⽆法直接修改外部变量x的值

在python3中可以通过nonlocal关键字声明⼀下x,表示这个变量不是局部变量,需要向上一层变量空间找这个变量

5.偏函数

当⼀个函数有⼤量参数,调⽤的时候非常不方便,可以使⽤偏函数技术,将⼀些参数固定(给默认值),达到简化函数调用的⽬的。

6.变量的作用域

程序中的变量并不是在任意的位置都可以随意访问,在哪里可以访问取决于这个变量的作⽤域,变量的作用域指的是变量在那段代码中可以使⽤,可以使用变量的那段代码就是变量的作用域。在python中,只有函数/类/模块才引⼊作⽤域,if/elif/else , while/for,try/except等并不会引⼊新的作用域

6.1 变量作用域的分类

按照作用域划分,可以分为:

  • L: Local,局部作用域
  • E: Enclosing,闭包作用域【闭包的外部函数中定义的变量】
  • G: Global,全局作用域 在所有函数外定义的变量
  • B: Built-in,內建作用域【内置作用域】

6.2 变量作⽤域查找规则

以 L --> E --> G -->B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,最后到内建作用域中找。

6.3 全局变量和局部变量

定义在函数内部的变量拥有⼀个局部作用域,被称为局部变量
定义在函数外面的变量拥有⼀个全局作⽤域,被称为全局变量
局部变量和全局变量同名,局部优先

6.4 global和nonlocal

函数填空题

1. 函数定义
def test1(a,b):
      return a + b
则test1(3,b=5)的值为___8______; test1(b=10,a=2)的值为
______12___。

2. 函数定义:
def test(a,b=2,*args):
      return a + b + sum(args)
则test(1,2,3,4,5)的值为__15_________; test(1)的值为:
_____3______; test(*[3,2,1,5])的值为: __11______;
test(*{1:2,3:4,5:6}.values())的值为___12____。

3. 函数定义:
def test(*args, **kwargs):
      tmp = list(args) + list(kwargs.values())
return sum([tmp[x] for x in range(len(tmp) )if not(x % 2) )]
则 t e s t ( a = 3 , b = 4 , c = 5 ) 的 值 : _ _8 _ _ _ _ ;
test(**{1:2,3:4,5:6,7:8})的值为: ___无法赋值______;
test(1,3,5,7,a=10,b=3)的值为: ___16______。

4. 函数定义:
def link(*args):
     args = [x if isinstance(x,str) else str(x) for x in args]
     return ‘’.join(args)
则lin k (1 ,2 ,3 )的值为: __123______; lin k (‘北京’,’python’,’1902’)的值为__北京python1902________。

5. 函数定义:
def demo(*args):
     return args * 2
则sum(demo(1,2,3))的值为____12____; len(demo())等于___0______。

6. 函数定义为:
def judge(a):
    if a > 0:
        return True
则print(“兔⼦” if judge(-1) else ‘狗’)输出: __狗_____

7. 已知: pf = lambda a,b=2:a + b; 则pf(2) = _4_____;
pf(3,4) = __7____; pf(b=3,a=5) = ___8______;

8. 已知:
def demo(a):
    a = 5
则执⾏a = 10; demo(a);后a = _10____;

9. 已知:
def demo(a):
for key in a:
a[key] += 10
则a = {1:10,2:20,3:30};则执⾏demo(a)后, a =____{1: 20, 2: 30, 3: 40}___________。

函数进阶_月隐学python第11课相关推荐

  1. 函数运用_月隐学python第10课

    初级 1.对加减乘除分别封装一个函数进行计算,参数是两个数,返回值是计算结果 2. 写函数,传入⼀个参数n,返回n的阶乘 3. 传⼊一个正整数,判断这个数是否是素数,如果是返回True,否则返回Fal ...

  2. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  3. 函数_月隐学python第9课

    前面我们写过九九乘法表,但如果我要七七乘法表或五五乘法表的话,你会看到三者代码极其类似,只是循环变量不同,那么如何做到代码重用,⽽不是简单拷贝黏贴修改呢,其实可是使⽤函数完成这一功能 函数的优点: 代 ...

  4. 字典与集合_月隐学python第8课

    一.字典 字典属于无序列,元素存放无序,是通过哈希方式进行数据存取的,字典是一个可变容器,字典中保存一个的键值对: key : value.我们通过key来获取对应的值,很类似我们的汉语字典. 字典中 ...

  5. 字符串_月隐学python第7课

    一.字符串 字符串就是由若干个不同的unicode字符组成的不可变序列 1 .字符串创建 2.获取字符 因为是不可变序列,所以不能修改单个字符: 凡是修改字符串的操作都产生新串 3.字符串转义 常⻅转 ...

  6. 列表_月隐学python第6课

    在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表.元组和字符串:其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属 ...

  7. 数据类型和运算符_月隐学python第3课

    1.类型判断 我们可以使⽤用type来返回数据类型和⽤用isinstance判断数据类型 2. 运算符和表达式 在数学上为了了计算结果,我们会写⼀一些式⼦子计算,例例如: 30 + 5 这是数学中的算 ...

  8. mysql高级之子查询,多表查询,外连接,集合操作,内部函数与数据控制_月隐学python第24课

    目录 ⼀.⾼级 1.1 ⼦查询 1.2 多表查询 1.3 外连接 1.4 集合操作 1.5 内部函数 ⼆.数据控制 2.1 事务 2.2 授权管理 ⼀.⾼级 1.1 ⼦查询 ⼦查询嵌⼊到其他查询语句中 ...

  9. mysql基础_月隐学python第22课

    目录 ⼀.数据库基本概念 常⻅的数据库: MySQL简介 mysql的安装 linux下 windows下安装 ⼆. SQL 三.操作数据库 四.数据库表 例子: 五.数据类型 数值型 字符型​ ⽇期 ...

最新文章

  1. 每天学习python 30分钟 -了解python - 看懂#!/usr/bin/python
  2. es6数组初始化_ES6 迭代器(Iterator)和 for...of循环使用方法
  3. C++中的 :: 用法
  4. SSD之硬的不能再硬的硬核解析
  5. Linux 部分(tcp\ip)系统内核优化
  6. python运维脚本部署jdk_Python+PyDev+Jdk+Eclipse开发环境部署
  7. ipixsoft swf to html5 converter,iPixSoft SWF to Video Converter
  8. java jibx,JiBx:BindGen命令行--通过Java POJO对象产生bind.xml和xsd文件
  9. python输出斐波那契数列_如何用Python输出一个斐波那契Fibonacci数列
  10. html 图片左中右排列,详解css布局实现左中右布局的5种方式
  11. 自我调整【管理学之十三】
  12. 5G基础及计算机网络参考模型
  13. sdkd2019.3.20训练题目
  14. 4.1 Member 的各种调用方式
  15. 给新人文案的一些建议
  16. 精益生产的亮点在哪?
  17. java超级玛丽含图片背景_java超级玛丽(带背景音乐)
  18. Spring注解分类
  19. BP神经网络+c代码
  20. Microsoft Office Professional Plus 2010

热门文章

  1. hybris backoffice和产品主数据相关的一些sample data
  2. 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
  3. Cloud for Customer的设置加载机制
  4. IBASE header status
  5. Opportunity的status改为lost后,chance of success仍然为100的原因
  6. 在SAP CRM webclient ui右上角显示系统时间
  7. Mockito框架实现学习之when(dummy)
  8. 用Visual Studio Code调试nodejs
  9. Tomcat和搜索引擎网络爬虫的攻防
  10. 一位全加器的结构描述vhdl_小学数学结构化学习的评价实践探索