函数的嵌套

  通过名字就能理解,函数里是还可以套着函数用的。这么牛,下面就来看看几段代码,看看是怎么回事。注意:函数一定是先定义后使用。

x=1234
def f1(): #定义一个主函数
x = 1
print('f1---> ', x)
def f2(): #主函数下的嵌套函数
x = 2
print('f2-----> ', x)
def f3(): #主函数下的嵌套函数
x = 3
print('f3-------> ', x)
f3() #调用函数f3
f2()#调用函数f2 f1() #调用主函数
f1---> 1 #以下是输出的结果
f2-----> 2
f3-------> 3

  函数的特性:

  1、函数可以被赋值

def foo(): #创建一个函数
print('foo')
f=foo #给变量名为f的赋值为foo函数
print(f)
f() #变量名可以直接调用函数等同于发f()=foo()

  2、可以把函数当成参数传递

def bar(func):#func=foo的值,给函数传参数
print(func)
func()
bar(foo)#foo是上面那个函数的返回值

  3、可以把函数当成返回值

def bar(func):
print(func)
return func f=bar(foo) #将foo的值传给func
print(f)
f()
<function foo at 0x0000000002133E18> #打印func的内存地址和foo的一致
foo #f的值

  4、把函数当做容器类型的元素去用(这个就不用举例了,像列表、元组、字典等容器)

  名称空间与作用域  

  名称空间是名称(标识符)到对象的映射。

  向名称空间添加名称的操作过程涉及到绑定标识符到指定对象的操作(以及给该对象的引用计数加 1 )。

  名称空间分为:

  1、内置名称空间

  2、全局名称空间

  3、局部名称空间

  作用域分为:

  1、L:local,局部作用域,即函数中定义的变量;

  2、E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

  3、G:globa,全局变量,就是模块级别定义的变量;

  4、B:built-in,系统固定模块里面的变量,比如int, bytearray等。

  搜索变量的优先级顺序依次是:

  作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是L>E>G>B。

  闭包

  闭包:首先必须是内部定义的函数,该函数包含对外部作用域而非全局作用域定义变量的引用。

x=1234 #x为全局作用域
def f1(): #定义一个主函数 f1函数名为全局作用域
x = 1
print('f1---> ', x)
def f2(): #f2为这个函数的局部作用域
x = 2
print('f2-----> ', x)
def f3(): #f3为这个函数的局部作用域
print('f3-------> ', x)
f3() #调用函数f3
f2()#调用函数f2 f1() #调用主函数
f1---> 1 #以下是输出的结果
f2-----> 2
f3-------> 2 #这个值就是调用的父级函数变量名的值

  总结:因为上面我们清楚了作用域搜索变量的优先顺序,在父级函数能匹配到对应的变量名的值,so,这个全局作用域的x的值形同虚设。没有引用到全局作用域的变量名的值,这就是闭包。

Python基础之函数二的更多相关文章

  1. python基础(12):函数(二)

    1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...

  2. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  3. python基础篇(二)

    PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...

  4. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  5. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  6. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  7. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  8. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  9. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

随机推荐

  1. 5-8套接字socket

    socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...

  2. react-踩坑记录——页面底部多出一倍高度的空白

    挂载slider组件后页面底部多出一倍高度的空白,如下: slider组件内容⬇️: class Slider extends Component{ constructor(){ super(); } ...

  3. mysql 半同步复制~ 整体概述与改进

    一 简介:今天来聊聊增强半同步复制这一强悍的特性 二 原理解析 1 AFTER_COMMIT(5.6默认值) master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log ...

  4. mysql案例~mysql主从复制延迟概总

    浅谈mysql主从复制延迟 1 概念解读 需要知道以下几点 1 mysql的主从同步上是异步复制,从库是串行化执行 2 mysql 5.7的并行复制能加速从库重做的速度,进一步缓解 主从同步的延迟问题 ...

  5. UVA315 Network 连通图割点

    题目大意:有向图求割点 题目思路: 一个点u为割点时当且仅当满足两个两个条件之一: 1.该点为根节点且至少有两个子节点 2.u不为树根,且满足存在(u,v)为树枝边(或称 父子边,即u为v在搜索树中的 ...

  6. C语言中用于计算数组长度的函数 “strlen() ”。

    de>#include<stdio.h>#include<stdlib.h>#define MAX_LEN 255int my_strlen1(const char* s ...

  7. 编程基础 - 0x00008 的0x代表什么?

    总结: 二进制:0dXXXX 八进制:0XXXX 十六进制:0xXXXX ------------------------------- 1- 十六进制 以“0x”开始的数据表示16进制,计算机中每位 ...

  8. 框架中的导航框架 & position定位

    框架中,通过链接将一个页面显示在另一个框架中:   总框架: <frameset cols="15%,*">   <frame src="xx.html ...

  9. Java基础4-面向对象概述;super();this()

    昨日内容回顾 java基本数据类型: byte : 一个字节,-128 ~ 127 = 256 short : 两个字节, -32768 ~ 32767 int : 四个字节, long : 八个字节 ...

  10. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...