博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python day09
阅读量:6985 次
发布时间:2019-06-27

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

一 函数对象

 在面向对象编程中 一切皆对象

函数是第一类对象 也就是说可以把函数的内存地址当作一种变量值去使用

而变量值:

l 可以被引用

ll 可以当作参数传递

lll 返回值可以是函数的

lv 可以当作容器类型的元素

so,函数可以(不加()时)作为一个对象,被当作值使用,而不是直接调用执行函数内代码。

这就是函数对象的概念,运用这个概念,可以简单的写一个函数字典:

def register():           #自定义一个函数    print("register......")def auth():    print("login....")def check():    print("checking....")func_dict = {"1": register, "2": auth, "3": check}  # 定义一个函数字典while True:    func_list = ["注册", "登录", "查看"]    for i, item in enumerate(func_list, start=1):65  #enumerate是将(可遍历的数据对象)列表组合为一个索引序列,同时列出数据和数据下标,通常用在for循环中        print(i, item)    cmd = input(" inpput cmdmand>>")    if func_dict.get(cmd):        func_dict.get(cmd)()    else:        print("输入有误")用户注册登录小程序

二、函数嵌套:

既然函数是对象,函数的操作都可以在其他函数内操作,比如定义和调用:

函数的嵌套调用:在一个函数内部又调用其他函数

函数的嵌套定义: 在函数内又定义了其他函数

def open_door():    print("你愁啥")    def putin():        print("瞅你咋地")        def close_door():            print("再瞅抽你")        close_door()    putin()open_door()嵌套调用

三 空间名称

名称空间namespace:存放 名字与值内存地址绑定关系 的地方

1.内置名称空间(Built-in):存放python自带的名称与值的绑定体,len、  print、 sum等内置方法的名字,注意关键字比如if、while...不存放在其中  

产生:在python解释器启动时创建

销毁:python解释器退出时关闭

2.全局名称空间(Global):当打开一个文件然后执行时,全局名称空间记录了文件中定义的变量,包括此文件中定义的函数、类、其他导入的模块、模块级的变量与常量。

产生:在.py文件被加载时创建,通常一直保留直到文件执行结束

销毁:python解释器执行python程序完毕后退出销毁

3.局部名称空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的参数、内部定义的局部变量。

产生:在函数被调用时才被创建

销毁:但函数返回结果或抛出异常时被删除。(每一个递归函数都拥有自己的命名空间)。

如果函数多层嵌套,介于全局和局部间,还有当前所在层函数的名称空间,比如函数嵌套定义时,putin()函数有自己的名称空间,也可以看作局部名称空间,只不过

它的子函数close_door()还有自己的局部名称空间(Local),即,局部是相对的。

 

名称空间的加载顺序:内置======》全局======》局部

名称空间的访问顺序:局部===逐层往上===》全局====》内置

 

四、作用域:名称空间的作用范围

Global广义化为—— 全局+内置名称空间

Local——  局部名称空间。可以用 print(global())   和在局部用print(local()) 查看当前位置的作用域内都有哪些"名称”。

还可以用 global  变量名 的方式,将变量声明为全局变量。nonlocal 变量名,将会声明:之后在当前作用域使用这个变量,将会引用外层(优先上一层)变量,但引用不到全局。

函数的作用域在定义时就固定了,与之后调用函数的位置无关!!!!

函数的作用域在定义时就固定了,与之后调用函数的位置无关!!!!

函数的作用域在定义时就固定了,与之后调用函数的位置无关!!!!

 

五、闭包

 定义在一个函数func1内的函数func2,在返回内部函数func2时,不是单纯返回此函数的地址,还将函数中访问到的本层和上一层(非全局)名称与值的映射一起返回了。

 

 

转载于:https://www.cnblogs.com/zhouyuquan/p/10039522.html

你可能感兴趣的文章
vim开启自动缩进
查看>>
【转】js之iframe子页面与父页面通信
查看>>
java设计模式_模版模式
查看>>
摄像机平滑更随脚本
查看>>
Struts2 标签配置详细
查看>>
需求管理工具比较 Doors_Requistie Pro_RDM
查看>>
centos+php+nginx的php.ini无法加载的问题
查看>>
从菜鸟到专家的五步编程语言学习法
查看>>
RequestQueue
查看>>
Android TextView 属性设置
查看>>
html元素分类以及嵌套规则
查看>>
android dpi
查看>>
C语言的预处理、编译、汇编、链接
查看>>
魅族 C++ 微服务框架技术内幕揭秘
查看>>
flask 学习笔记 mvc ,sqlalchemy(insert,update)
查看>>
HTML基础(一)
查看>>
EGOImageView 解析
查看>>
我的友情链接
查看>>
1.解读REST和JAX-RS
查看>>
将RHEL7/centos7系统网卡名称eno16777736改为eth0
查看>>