函数的嵌套

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

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. python常用模块之os模块

    全部参考~~~~~~~ 1. 解释说明版:https://www.cnblogs.com/yufeihlf/p/6179547.html 2. 简洁版: https://www.cnblogs.com ...

  2. 「SHOI2015」(LOJ2038)超能粒子炮・改

    传送门:Here 一句话题意:给定$ t$次询问,每次读入$n,k,$求$ \sum_{i=0}^kC_n^k\ mod\ 2333$, 其中$ t \leq 100000$,$n,k \leq 10 ...

  3. Maven项目配置logback

    首先,在pom.xml中加入maven依赖 <!-- log start --> <dependency> <groupId>org.slf4j</group ...

  4. Python API简单验证

    前言 因为CMDB内部的需求,需要一个API进行数据传输,用来传递需要抓取的服务端信息信息给抓取的autoclient,autoclient抓取好之后再通过API传输到服务器,保存到数据库.但是为了防 ...

  5. MGR架构~高可用架构细节的梳理

    一 简介:今天咱们来聊聊mgr的细节原理相关 二 选择新主机制   1 当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值 ...

  6. ASP.NET MVC 4 从示例代码展开,连接默认SQL Server数据库

    VS2013里面,点击菜单[视图]-[SQL server对象资源管理器],右键点击[SQL Server]节点,选择[添加SQL Server]自动生成. 这只是开始,可以让网上下载下来的例子运行出 ...

  7. 2.获取公开的漏洞信息-查询还有哪些系统补丁未堵住-查询exp

    本章内容为第一课的实战部分,请结合原创一起浏览. 微软官网 https://www.microsoft.com/zh-cn 在页脚找到TechNet 查看安全公告 MS系列微软编号在微软安全报告中存在 ...

  8. NMON使用以及nmon_analyse生成分析报表

    在我们监控我们的操作系统的时候如果可以把各个硬件的监控信息生成形象化的分析报表图对于我们来说是件太好的事情了,而通过ibm的nom和nmon_analyser两者的结合完全可以实现我们的要求.首先对n ...

  9. 纪念一下我对Kalman的无限崇拜之情

    今天用Kalman来求线性预测模型的系数,和LMS一对比,天啦噜,我感叹了半小时... 和LMS需要选合适的步长,样本序列需要足够长,迭代次数需要足够多,相比,卡尔曼真是帅呆了!不需要步长!不需要蒙特 ...

  10. 题解-bzoj3569 DZY Loves Chinese II

    Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...