函数高级篇

1.函数嵌套

  1)嵌套定义

    在函数内定义另外一个函数

def func():
print('嵌套定义')
def func1():
print('这是一个嵌套函数')
def func2():
print('第二层级嵌套函数')
func2()
# 只能在函数内调用嵌套的函数
# 嵌套函数只能在当前函数处在的层级进行调用
func1()
func()

  2)嵌套调用

    函数内调其它函数

def max(x,y):
if x > y:
return x
else:
return y
def func(x):
print(x)
func(max(10,20))

2.名称空间

  1)定义:

    存储变量名和变量值的绑定关系

  2)分为三类:

    a.内置名称空间

      内置名:Python解释器自带的,如print等内置方法名

      作用时间:在打开解释器时生效,关闭时失效

      作用域:整个Python解释器,具有全局特性

    b.全局名称空间

      全局名:文件级别的名字

      作用时间:Python脚本执行时候生效,文件结束或者文件执行期间被删除的时候失效

      作用域:整个脚本范围内

    c.局部名称空间

      局部名:函数内部的名字

      作用时间:函数调用时生效,结束调用时失效

      作用域:函数内部

要点:

  名称查询顺序:

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

3.作用域

    1)全局作用域

      范围:内置名称空间、全局名称空间

      特点:

        a.在任何位置都可以访问

        b.该范围内的名字会伴随着整个生命周期

    2)局部作用域

      范围:包含的事局部名称空间的名字

      特点:

        a.只在函数内使用

        b.调用函数时生效,调用结束时失效

4.函数对象

  函数在Python是第一对象,可以被引用

  1)函数可以被引用

def func():
pass
f = func # 函数的内存地址赋值给其他变量

  2)函数可以当做参数传入

def bar(x):
print(x)
bar(func)

  3)函数可以被当做返回值返回(函数的返回值可以是任意类型)

def bar(x):
return x # 返回func函数的内存地址
bar(func)

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

def auth():
print('认证...')
def register():
print('注册...')
def search():
print('查看...')
def transfer():
print('转账...') # 后续需要添加先功能可直接将定义好的功能函数名!!!加到字典中
# 无序大量更改交互函数的代码
func_dict = {
'':auth,
'':register,
'':search,
'':transfer
}
def interaction():
while True:
print('''
用户交互:
1 认证
2 注册
3 查看
4 转账
输入quit退出
''')
choice = input('选择操作>>').strip()
if choice in func_dict:
func_dict[choice]()
elif choice == 'quit':
break
else:
print('非法操作...') # 函数调用
interaction() # 将函数的内存地址赋值给列表
l = [auth,register,search,interaction]

5.函数闭包

  1)定义

    a.定义在函数的函数

    b.并且该函数包含对外部函数作用域中名字的引用

  2)闭

    指定义在函数内部的函数

    作用域关系在函数定义时已经定义好,与函数在哪里被调用无关!!!

def outer():
def inner():
x = 10
print('from inner...',x)
# 将函数的内存地址返回给outer
return inner # 函数的返回值赋值给全局变量outer
# 相当于把inner的内存地址复制给一个全局变量
return_inner = outer() # 间接调用了inner()
x = 100
return_inner() # 与调用位置无关,输出 x 依旧为原函数内x的值 def bar():
x = 99
return_inner()
bar()
闭包高级使用:装饰器
  http://www.cnblogs.com/mdzzbojo/p/8669485.html

  

    

Python全栈-day10-函数2的更多相关文章

  1. Python全栈day10(基础知识练习题)

    一,执行python的两种方式 1,写在脚本里面调用python执行,例如python test.py 2,  输入python在命令行交互执行,例如 python  >>> pri ...

  2. Python全栈day10(基本数据类型及其常用方法)

    一,数字 1,int 将字符串转化成数字 a = '123' b=int(a) b=123 2,以进制方式进行转换 num="a" >>> num = " ...

  3. Python全栈day10(Pycharm的安装和使用)

    Python开发IDE 一,下载Pycharm专业版 二,安装Pycharm 三,新建项目 四,设置字体大小

  4. Python全栈day10(运算符)

    一,运算符 + - * . ** % // 二,in 和not in 一个字符串包含多个字符可以通过in判断字符是否属于改字符串 >>> name = "zhangsan& ...

  5. python全栈开发 生成器 :生成器函数,推导式及生成器表达式

    python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...

  6. python全栈开发之匿名函数和递归函数

    python 匿名函数和递归函数 python全栈开发,匿名函数,递归函数 匿名函数 lambda函数也叫匿名函数,即函数没有具体的名称.是为了解决一些功能很简单需求而设计的一句话函数.如下: #这段 ...

  7. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  8. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  9. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  10. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

随机推荐

  1. [ovs] ovs开启日志debug

    如题 [root@vrouter1 ~]# ovs-appctl vlog/set netdev:file:dbg [root@vrouter1 ~]# ovs-appctl vlog/set net ...

  2. 《Redis 数据操作》

    一:字符串类型(string) - 应用场景  - 用于常规计数,常规的 key-value 存储. - 常用操作 常用操作 设置一个值为(字符串类型) SET key value 设置一个值并设置过 ...

  3. idea 在tomcat启动的时候发现控制台输出的是乱码

    先前觉得是tomcat的问题,后来发现是idea的问题: 打开IntelliJ IDEA本地安装目录中bin文件夹下的idea.exe.vmoptions和idea64.exe.vmoptions这两 ...

  4. Win7 开机自动启动Outlook2010

    工作中,设置一些开机启动项,可以提供工作效率,下面演示设置Outlook2010在win7系统开机自启动,其它软件,如Eclipse.微信等,也可以这么配置. 环境: win7,outlook 201 ...

  5. vivado SDK之找不到"platform.h"

    解决方法:建工程的时候不要选择empty application,而是选择hello  world,里面会自动包含platform.c,platform.h等. 另外,常用的xgpio.h头文件有时候 ...

  6. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

  7. linux init命令

    init命令用于切换到指定的运行级别,用法如下: [root@localhost ~]# init //关机 [root@localhost ~]# init //切换到单用户模式/救援模式 [roo ...

  8. 对比库表结构,生成SQL

    网上找了一圈对比库的工具,能手工生成差别的SQL的工具没有,改造了一下网上的sql 1, 获取字段名的类型 create FUNCTION [dbo].[getColType](@tab varcha ...

  9. 003-docker命令-远程镜像仓库命令,本地镜像管理命令

    1.远程镜像仓库 docker login/logout:查看 [不常用] docker push:查看 [不常用] docker search:从Docker Hub查找镜像 语法:docker s ...

  10. Redis入门到高可用(八)——list

    一.结构 key - value 结构,value是一个有序队列. 可进行左边的添加及弹出,右边的添加及弹出. 可获取列表的长度,删除列表中指定元素,获取列表的子列表,按照索引获取列表的指定元素. 特 ...