实例详解python函数的对象、函数嵌套、名称空间和作用域


Posted in Python onMay 31, 2019

函数的对象

python中一切皆对象

函数对象的四大功能

引用

def f1():
  print('from f1')
f1() #调用函数
print(f1)
print('*'*50)
f = f1 # 将函数名f1赋值给f
f() # f也可以调用函数
print(f)
from f1
<function f1 at 0x000001FB05534620>
**************************************************
from f1
<function f1 at 0x000001FB05534620>

函数名相当于一个变量名,既能接收函数体返回的值,也能赋值。

当做参数传给一个函数

def f1():
  print('from f1')

def f2(a):
  return a
f3 =f2(f1)
f3()
print(f3)

from f1
<function f1 at 0x00000275FA914620>

可以当做函数的返回值

def f1():
  print('from f1')
def f2():
  return f1
f3 =f2()
f3()
print(f3)
from f1
<function f1 at 0x0000014931304620>

可以当做容器类型的元素

def f1():
  print('from f1')

l = [1,2,3,f1]
l[3]()

from f1

函数的嵌套

函数的嵌套定义

函数内部定义的函数,无法在函数外部使用内部定义的函数。

函数的嵌套调用

from math import pi
def circle(r,action):
  if action == 'p':
    def perimeter():
      return 2 * pi * r
    res = perimeter()
  elif action == 'a':

    def area():
      return pi * r**2
    res = area()
  else:
    return ' '
  return res
result = circle(2,'p')
print(result)
12.566370614359172

名称空间与作用域

名称空间

内存存储变量名与变量间的绑定关系的空间(存放变量名的空间),这个空间被称为名称空间。

内置名称空间

内置名称空间:存放python解释器自带的名字,如:int、float、len等

len()
int()

生命周期:在解释器启动时生效,在解释器关闭时失效。

全局名称空间

全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,如:x、func、l、z

生命周期:在文件执行时生效,在文件执行结束后失效。

局部名称空间

局部名称空间:用于存放函数调用期间函数体产生的名字。

def f1():
  x = 1
  def f2(): # f2就是局部名称空间
    pass
  f2()

生命周期:在文件执行函数调用期间时生效,在函数执行结束后失效。

加载顺序 (考试必考)

内置名称空间—>全局名称空间—>局部名称空间

查找顺序 (考试必考)

从当前名称空间开始查找,然后逐步往上,如果当前为局部,则顺序为局部—>全局—>内置

作用域

作用域:作用的区域

作用域关系在函数定义阶段就已经确定好了

函数与函数之间可能会有相同名字的变量,但是这个两个变量毫无关系,作用域不同

全局作用域

适用于全局+内置,即全局可以修改内置的,内置也可以修改全局的

局部作用域

只适用于局部范围,在局部定义的名字只能在局部获取

x =100
def f1():
  x =1
  print(x) # 定义阶段
f1()

global 局部修改全局 (了解,面试常用)

x =100
def f1():
  global x
  x =1
  # print(x)
f1()
print(x)

nonlocal 把局部改成外部

xxxxxxxxxx9 1  def f1():2  x =13  def f2():4    nonlocal x 5    x =36  f2()7  print(x)8f1()93pythono

总结

以上所述是小编给大家介绍的python函数的对象、函数嵌套、名称空间和作用域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
Python3字符串学习教程
Aug 20 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python测试模块doctest使用解析
Aug 10 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
基于python实现雪花算法过程详解
Nov 16 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python中rc1什么意思
Jun 19 Python
Python可变和不可变、类的私有属性实例分析
May 31 #Python
python实现批量视频分帧、保存视频帧
May 31 #Python
Python内置random模块生成随机数的方法
May 31 #Python
Python模块、包(Package)概念与用法分析
May 31 #Python
python多线程下信号处理程序示例
May 31 #Python
浅谈Python大神都是这样处理XML文件的
May 31 #Python
Python2.7实现多进程下开发多线程示例
May 31 #Python
You might like
PHP has encountered an Access Violation
2007/01/15 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vue.js中created方法作用
2018/03/30 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
python简单实现基数排序算法
2015/05/16 Python
python logging日志模块的详解
2017/10/29 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
python里glob模块知识点总结
2021/01/05 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
蟋蟀的住宅教学反思
2014/04/26 职场文书
银行催款通知书
2015/04/17 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
学生会自荐信
2019/05/16 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
实现GO语言对数组切片去重
2022/04/20 Golang