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 ...
随机推荐
- java 写 Excel(不生成实体文件,写为流的形式)
java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...
- Springboot(一)概念
一.概念 Spring boot 用来简化新Spring应用的初始搭建和开发配置. 二.特性 1.创建独立的Spring应用程序,不是对spring功能增强,而是提快速使用Spring的功能: 2.嵌 ...
- python(十一)面向切面编程AOP和装饰器
二.装饰器 装饰器可以在给函数修改功能的同时并不改变这个函数本身.(以下用的都是python2.7) 首先,在python里面函数是对象,在下面的函数里"fun"是函数也是对象可以 ...
- Grouping ZOJ - 3795 (tarjan缩点求最长路)
题目链接:https://cn.vjudge.net/problem/ZOJ-3795 题目大意:给你n个人,m个关系, 让你对这个n个人进行分组,要求:尽可能的分组最少,然后每个组里面的人都没有关系 ...
- 在Linux安装ASP.NET Core运行时环境
我使用的是Centos7 ,其它的Linux请参考微软文档 微软官方介绍文档: https://www.microsoft.com/n ...
- Python-字符串的常用操作
name = "my name is irving and i am 22 years old!" #开头字母大写 print(name.capitalize()) #统计某字符个 ...
- camera理论基础和工作原理【转】
转自:http://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html 写在前面的话,本文是因为工作中需要编写摄像头程序,因 ...
- css3新属性运用
1.css3新单位vh.vw,这个单位是相对显示窗口的宽度或高度 vh等于viewport高度的1/100.例如,如果浏览器的高是900px,1vh求得的值为9px.同理,如果显示窗口宽度为750px ...
- 华为QUIDWAY系列路由器的负载均衡配置
作者:邓聪聪 华为系列路由器的负载均衡NQA联动侦测配置案例: 需求:该局域网,IP地址(末位奇数)走联通,IP地址(末位偶数)走电信当某个运营商不可达时,自动切换.通过NQA来确定运营商是否可达., ...
- Liunx之始
作者:邓聪聪 本章是为了工作之需要,所做的一个学习心得,也为自己留下相关印记以便日后留用. 1:安装服务yum install ppp -yyum install pptpd -y由于yum源没有pp ...