Python基础之函数二
函数的嵌套
通过名字就能理解,函数里是还可以套着函数用的。这么牛,下面就来看看几段代码,看看是怎么回事。注意:函数一定是先定义后使用。
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基础之函数二的更多相关文章
- python基础(12):函数(二)
1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...
- Python 基础 面向对象之二 三大特性
Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...
- python基础篇(二)
PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- python基础——匿名函数及递归函数
python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...
随机推荐
- 利用PyMySQL库连接数据库
安装与准备 这是python3的库,所以windows下安装不会像python2那样各种奇葩VC错误.是比较方便的傻瓜安装. Windows平台下: py -3 -m pip install PyMy ...
- 【mmall】Guava框架
Guava 简介:http://www.yiibai.com/guava 本项目主要用到了Guava缓存
- 【提示框】【计时事件】【cookie】
1.提示框 1)警告框 <script>function disp_alert(){alert("我是警告框!!")}</script> 2)确认框 fun ...
- java基础梳理--朝花夕拾(三)
1.了解面向对象的编程思想以及面向对象的特性: 对象: EveryThing is Object: 万物皆是对象,在程序中,我们可以将类.接口.方法.属性等都认为是对象: 面向对象: 是一种程序设计方 ...
- Centos7.5 VMtools的安装与卸载
一.安装 1.自带tools: 选择VMware工具栏 => 虚拟机 => 安装VMtools 2.挂载光驱 3.tar -zxvf VMwareTools-10.3.2-9925305 ...
- MBA(它是指营销策划,领导力和影响力,财务会计,战略和转型的IT,企业融资,用于决策的数据分析识别市场趋势获得业务优势,全球商业战略)
推荐阅读者:玩股票的,创业的,管理者,吃货的商人,老板,管理层以及这方面的爱好者. 知识来源:https://www.edx.org/micromasters/USMx-UMD-MBA-Core-Cu ...
- 【leetcode】657. Robot Return to Origin
Algorithm [leetcode]657. Robot Return to Origin https://leetcode.com/problems/robot-return-to-origin ...
- Xilinx原语学习之时钟资源相关原语
一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能:尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能.由于使用IP时,会涉及到MD ...
- 注解 java.lang.annotation.Inherited 介绍
在Spring Boot中大量使用了@Inherited注解.我们来了解一下这个注解的用法,注解的源码: package java.lang.annotation; /** * Indicates t ...
- ping 丢包或不通时链路测试说明【转】
转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...