函数对象:

  函数是第一类对象,即函数可以当做数据传递

    1 可以被引用

    2 可以当做参数传递

    3 返回值可以是函数  (函数名 不带() 就是函数名的内存地址,带括号就是执行函数)

    4 可以当做容器类型的元素

def foo():print('foo')def bar():print('bar')dic={'foo':foo,'bar':bar,
}
while True:choice=input('>>: ').strip()if choice in dic:dic[choice]()
def func(): # func=函数的内地址    print('from func')
age=10# 1. 可以被引用# x=age# print(x,age)

# f=func# print(f)# f()

# 2. 可以当作参数传给另外一个函数# def bar(x):#     print(x)

# bar(age)# bar(func)

# 3. 可以当作一个函数的返回值# def bar(x):    # return x

# res=bar(age)# print(res)

# res=bar(func)# print(res)

# 4. 可以当作容器类型的元素# l=[age,func,func()]# print(l)
 

利用函数的特性取代多分支的if

def foo():print('foo')def bar():print('bar')dic={'foo':foo,'bar':bar,
}
while True:choice=input('>>: ').strip()if choice in dic:dic[choice]()

函数的嵌套

函数的嵌套定义:一个函数内部又定义了另一个函数
def f1():def f2():def f3():print('from f3')f3()f2()f1()
f3() #报错 空间与作用域

函数的嵌套调用 :在调用一个函数过程中,内部代码又调用了其他函数
def max(x,y):return x if x > y  else ydef max4(a,b,c,d):res1=max(a,b)res2=max(res1,c)res3=max(res2,d)return res3
print(max4(1,2,3,4)

名称空间与作用域

  什么是名称空间: 存放名字的地方,三种名称空间(内置 全局 局部)

  名称空间的加载顺序

    python test.py

    1 python解释器先启动,因而首先加载的是:内置空间

    2 执行test.py文件,然后以文件为基础,加载全局名称空间

    3 执行文件的过程中如果调用函数,则临时产生局部名称空间

  名字的查找顺序

    局部名称空间———》全局名称空间——》内置名称空间 (在全局无法查看局部的,在局部可以查看全局的)

# max=1
def f1():# max=2def f2():# max=3print(max)f2()
f1()
print(max)

作用域

#1、作用域即范围- 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效- 局部范围(局部名称空间属于该范围):临时存活,局部有效
#2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下
x=1
def f1():def f2():print(x)return f2
x=100
def f3(func):x=2func()
x=10000
f3(f1())#3、查看作用域:globals(),locals()
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
locals 是函数内的名字空间,包括局部变量和形参
enclosing 外部嵌套函数的名字空间(闭包中常见)
globals 全局变量,函数定义所在模块的名字空间  将局部变量的作用域提升至全局作用域,可以用来在局部修改全局的不可变类型
builtins 内置模块的名字空间

nonlocal 声明一个名字是来自于当前层外一层作用域的,可以用来在局部修改外层函数的不可变类型将L 与 E 中的名字统一需要提前定义

!!!名字的查找顺序,在函数定义阶段就已经固定死了(及在检测语法是就已经确定了名字的查找顺序),与函数的调用位置无关,也就是说无论在任何地方调用函数,都必须回到当初定义函数的位置去确定名字的查找关系

x=111
def outer():def inner():print('from inner',x) # x访问的时全局名称空间中xreturn innerf=outer()        <function outer.<locals>.inner at 0x00000000021DB6A8>
print(f)           from inner 222x=222
f()                  222  访问时全局的x已经被重新赋值了x=111
def outer():def inner():print('from inner',x) # x访问的时全局名称空间中xreturn innerf=outer()           from inner 444  全局被重新赋值为444# x=222
def func():x=333f()x=444func()    func->f->outer->x 全局变量 444     from inner 444

转载于:https://www.cnblogs.com/lakei/p/10636639.html

函数对象 函数嵌套 名称空间与作用域相关推荐

  1. 函数对象,嵌套,空间与作用域

    一:函数对像 #函数是第一类对象的含义是函数可以被当作数据处理 1,可以被引用: 2,可以当作参数传给另一个函数. 3,可以当作函数的返回值. 4.可以当作容器类型的元素. 例子:def pay(): ...

  2. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

  3. python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

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

    函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print("from f1") f1() #调用函数 print(f1) print(&quo ...

  5. python 3.28 第三章 函数嵌套/名称空间//内置名称空间/全局名称空间/局部名称空间/作用域/函数对象/闭包函数。...

    1 函数嵌套: 函数内可以调用了其他的函数. # def max2(x,y):# if x > y:# return x# else:# return y## def max3(x,y,z):# ...

  6. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数

    一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址print('from func')print(func)age=1 ...

  7. 函数对象,名称空间与作用域,闭包,装饰器

    函数是第一类对象即可以被当做数据取使用 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 1.可以被引用 先看变量可以怎么玩 age=18 x=age 把 ...

  8. 函数的嵌套,名称空间和作用域

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(bigg ...

  9. Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...

    Python Day 10  函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal) 名称空间(命名空间): 当程序运行时,代码从上至下一次读取,遇到变量与值, ...

最新文章

  1. linux centos7安装git服务器配置,CentOS7 Linux环境下搭建Git仓库
  2. java调用kettle连hive_使用java连接hive,并执行hive语句详解
  3. STM32之option bytes踩坑记录
  4. 使用Charles为Android设备抓取https请求的包
  5. python发人人状态
  6. NLTK完成简单的情感分析
  7. “天问一号”成功发射,马斯克点赞:非常振奋人心
  8. python3 range函数_为什么python3中的xrange函数不能用
  9. android 代码循环,Android – 每5秒循环一部分代码
  10. poythoncode-实战5--json 文件读取,文本文件,csv文件,存到系统中以大列表方式进行存储
  11. VMware Workstation Pro v16.1.0虚拟机下载安装过程
  12. 深度学习与围棋:为围棋数据设计神经网络
  13. 大明湖畔的正则表达式,你还记得么?
  14. 可见光成像通信(OOC)驱动频率区域的计算
  15. 问题 L: 鸭子唱歌
  16. #Vue3篇:watch、watchEffect、watchPostEffect、watchSyncEffect的区别
  17. UI设计之什么是设计
  18. matlab 角度 弧度
  19. 第五章人间深情,公母为山
  20. 徽章插件_为您的未来项目免费徽章PSD和矢量集

热门文章

  1. 高通modem启动过程_苹果首次承认正自研基带芯片,高通要被抛弃了?
  2. Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles
  3. Ubuntu16.4(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境安装
  4. qt同时连接oracle和mysql_QT连接Oracle和Mysql的详细步骤,已成功~!
  5. chrome jsp 显示不正常_JSP程序在chrome下不兼容的问题!
  6. linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)
  7. 把变量赋值给寄存器_散装 vs 批发谁效率高?变量访问被ARM架构安排的明明白白...
  8. java递归统计一个文件夹含子文件夹里文件不同后缀的出现次数
  9. Boyer-Moore 投票算法
  10. NLP复习资料(5)-第九章 句法分析