博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数
阅读量:6953 次
发布时间:2019-06-27

本文共 2296 字,大约阅读时间需要 7 分钟。

一 函数是第一类对象,即函数可以当作数据传递     1 可以被引用     2 可以当作参数传递     3 返回值可以是函数     3 可以当作容器类型的元素     def foo():         return len     f = foo     print(foo)     [foo, ]     函数嵌套(把大问题细分成小问题,把小问题平道一起解决)         函数的嵌套定义: 在函数内部又定义了其他函数         函数的嵌套调用:在一个函数内部又调用其他函数 2.名称空间与作用域:     什么是名称空间?         名称空间:存放名字的地方,三种名称空间,         (之前遗留的问题x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方)         名称空间Namespaces:指的就是存放名字与内存地址绑定关系的地方(内存空间)     名称空间分为三大类         内置名称空间: 存放的是python解释器自带的名字             产生:python解释器的启动则产生             销毁:python解释器关闭则销毁         全局名称空间: 在顶级定义的名字             产生:执行python程序时产生             销毁:python程序执行完毕后则销毁         局部名称空间: 在函数内定义的名字             产生: 在函数调用时临时产生             销毁: 在函数调用完毕后则销毁     三种名称空间的产生的先后顺序: 内置->全局->局部         查找名字的顺序:从当前位置往外一层一层查找             如果当前在局部名称空间: 局部->全局->内置             如果当前在全局名称空间: 全局->内置         需要注意的是:在全局无法查看局部的,在局部可以查看全局的,如下示例         # max=1         def f1():             # max=2             def f2():                 # max=3                 print(max)             f2()         f1()         print(max) 作用域:     #1、作用域即作用范围         - 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效        - 局部范围(局部名称空间属于该范围):临时存活,局部有效         全局作用域:包含内置与全局名称空间的名字             特点:全局存活,全局有效         局部作用域:包含局部名称空间的名字             特点:临时存活,局部有效     #2、!!!!!作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下     x=1     def f1():         def f2():             print(x)         return f2     x=100     def f3(func):         x=2         func()     x=10000     f3(f1())     #3、查看作用域:globals(),locals()         locals 是函数内的名字空间,包括局部变量和形参         globals 全局变量,函数定义所在模块的名字空间 global与nonlocal关键字         global  适用于函数内部修改全局变量的值         nonlocal  适用于嵌套函数中内部函数修改外部变量的值         如果没有使用以上关键字,对全局变量或者外部变量进行修改,python会默认将全局变量隐藏起来 4.闭包函数 = 函数对象 + 函数嵌套定义 + 作用域     闭包函数指的是定义在函数内部的函数,         并且该内部函数包含对外层函数作用域名字的引用     def outter(x):         def inner():             print(x)         return inner     f = outter(10)     #闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,                 这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域     #应用领域:延迟计算(原来我们是传参,现在我们是包起来)         from urllib.request import urlopen         def index(url):             def get():                 return urlopen(url).read()             return get         baidu=index('http://www.baidu.com')         print(baidu().decode('utf-8'))

转载于:https://www.cnblogs.com/du-jun/p/9767710.html

你可能感兴趣的文章
[Java]HashMap的两种排序方式
查看>>
C++中const与指针、引用的分析(转自china_unix GP-King)
查看>>
mysql 保存emoji 4字节宽度字符串
查看>>
diff结果分析
查看>>
php UUID &分布式生成用不重复的随机数方法
查看>>
C语言中强制转换问题
查看>>
python--练习--for i in range(2,101)
查看>>
每天一个linux命令(25):chgrp命令
查看>>
【15】万魂杀服务器开发之原始NIO、Mina、Netty使用
查看>>
git rebase之前需要 commit 才行
查看>>
zabbix2.4.6升级zabbix3.0.8后无法发送报警邮件
查看>>
android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
查看>>
fscanf、fprintf的返回值
查看>>
Notepad++ 快捷键
查看>>
当Win10软件窗口消失了怎么办
查看>>
我是怎么招聘程序员的
查看>>
shell逻辑判断、文件属性判断、if特殊用法、case判断
查看>>
Jenkins在Windows下的安装与配置
查看>>
数据结构与算法之递归和分治思想
查看>>
CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)
查看>>