名称空间

摘要:
函数对象可以直接引用,可以用作函数参数,可以用作功能,可以用作返回值,并且可以用作容器类型元素defdd(a,n2)returnmethod_ Map={'add':}#根据指令获取计算方法defget _ cp_ Fn(cmd):returnmethod[cmd]returnadd#错误的输入默认方法处理whileTRUE:cmd=input('cmd:

一、函数对象

定义:函数名存放的就是函数的地址,所以函数名就是对象,称之为函数对象

  1. 可以直接被引用
  2. 可以当作函数参数传值
  3. 可以作为函数发返回值
  4. 可以作为容器类型的元素
名称空间第1张名称空间第2张
def add(a,b):
    return a+b
def low(a,b):
    return a-b
def jump(a,b):
    return a*b
def full(a,b):
    return a/b
def quyu(a,b):
    return a%b
def computed(fu,n1,n2):
    res = fn(n1,n2)
    return
method_map = {
    'add':add,
    'low'=low,
    'jump':jump,
    'full':full,
    'quyu':quyu,
}
#根据指令获取计算方法
def get_cp_fn(cmd):
    if cmd in method_map:
        return method[cmd]
    return add #输入有误默认方法处理
while TRUE:
    cmd = input('cmd: ')
    if cmd == 'quit':
        break
    cp_fn = get_cp_fn(cmd)
    result = computed(cp_fn,100,20)
    print(resule)
View Code

二、名称空间

  • 定义:存放名字与内存地址对应关系的容器
  • 作用:解决由于名字有限,导致名字重复发生冲突
  1. Built_in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
  2. Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
  3. local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁
名称空间第3张名称空间第4张
def fn():
    global num
    num = 20
    print(num)
#global关键词可以将Local的名字提升为Global的名字
#一个文件中的Global名字就是一个,所以函数内部外部使用的名字都是一个
fn() # 注:一定要调用函数,才能产生名字,并提升
print()
View Code

三、函数的嵌套

#将函数直接定义到另一个函数内部,就可以使用外部函数中的名字
def outer():
    num = 20
    def inner():
        print(num) #inner就可以直接使用outer中的名字
    inner()
outer()

四、作用域

  • 定义:名字起作用的范围

  • 作用:解决同名可以共存的问

#四种作用域
#Built-in:内置作用域,所有文件所有函数
#Global:全局作用域,当前文件所有函数
#Enclosing:嵌套作用域,当前函数与当前函数的内部函数
#Local:局部作用域,当前函数

# 注:
# 不同作用域之间名字不冲突,以达到名字的重用
# 查找顺序:Local > Enclosing > Global > Built-in
len = 10
def outer():
    len = 20
    def inner():
        len = 30 
        print('1',len)
    inner()
    print('2',len)
outer()
print('3',len)

del len:
  
print('4',len)

五、闭包

  • 本质就是函数嵌套(格式稍作改良)
#inner可以使用outer的局部变量:可以将inner定义在outer中
#inner的调用还是在外部:inner函数对象可能被outer返回

#将内部函数对象作为外部函数的返回值,1、可以使用局部变量;2、不改变函数的调用位置
def outer():
    num = 10
    def inner():  #闭包:closure,定义在函数内部的函数
        print(num)
    return inner
fn = outer()  #fn = inner
fn()

闭包案例:

名称空间第5张名称空间第6张
import time
def download():
    print('开始下载')
    time.sleep(2)
    print('下载完成')
    data = '下载得到的数据'
    outer(data)
#为闭包传参
def outer(data):
    def inner():
        #保存,播放,删除等操作
        print("闭包打印: ",data)
    inner()
download()
View Code

免责声明:文章转载自《名称空间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VMware Data Recovery备份恢复vmware虚拟机RabbitMQ从入门到精通(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

程序设计与算法(三)C++面向对象程序设计 (北大MOOC)

  C++中有两方面体现重用:1、面向对象的思想:继承和多态,标准类库  2、泛型程序设计的思想:模板机制,以及标准模板库STL   标准模板库(Standard Template Library)就是一些常用数据结构和算法的模板的集合,有了STL,不必再写太多的标准数据结构和算法,并且可以获得非常高的性能     STL六大部件:容器(Container...

MySQL、DM 行转列及字段去重(Group_Concat())

      最近在使用数据库迁移适配,由MySQL 库迁移到达梦数据库,其中进行行转列时,MySQL转换达梦sql语法有些问题,特记录。       在MySQL 下有Group_Concat(expr)  ,在达梦及神通数据库下如何转换,有没有同样或者类似功能的函数呢?请看下面记录。       MySQL中 Group_Concat(expr)  函数...

LoadRunner系列之—-01 接口压力测试脚本

 LoadRunner中一般用如下函数进行接口测试: <一>. http或soap协议下的get请求接口,样例如下: web_url("integrated_query.jsp", "URL=http://{UrlAddress}/pcis/policy/query/integrated_query.jsp?CASOPDPT=00&...

Scala 学习之 aggregate函数

fold和reduce都要求函数的返回值类型需要和我们所操作的RDD类型相同,但是我们有时确实需要一个不同类型的返回值。eg: 在计算平均值时,需要记录便利过程中的计数以及元素的数量,这就需要我们返回一个二元组。可以先对数据使用map操作,来把元素转移为改元素和1的二元组,也就是我们希望的返回类型。这样reduce就可以以二元组的形式进行归约。 aggre...

python之(25)中级总结(3)关系型数据库(mysql和oracle使用)

1、Python MySQL - mysql-connector 驱动 1、安装mysql驱动 python -m pip install mysql-connector 2、测试驱动 import mysql.connector 3、代码实现 1、基本操作 import mysql.connector conn=mysql.connector.conne...

【译】颜色空间 REC.709 vs sRGB的

(原文link https://www.image-engineering.de/library/technotes/714-color-spaces-rec-709-vs-srgb, 欢迎指正) 如果你不关心背景知识的话,下面这句话或许足够了,HDTV(REC.709)和sRGB用的是一样的三基色,但是转换函数(gamma)不同。 颜色空间定义 感谢耐心...