day12 函数嵌套

一、 args与kwargs

def index(a,b,c):
print(a,b,c) def wrapper(*args,**kwargs): # args=(1,2,3) kwargs={}
index(*args,**kwargs) # index(*(1,2,3) ,**{}) # index(1,2,3) wrapper(b=2,c=3,a=1)

二、函数嵌套

一、函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数
# 函数的嵌套定义: 在函数内又定义了一个函数
# def f1(): # 定义在函数内部的内容有一个效果:函数外无法访问,只有在函数内才可以访问到
from math import pi
def circle(radius,mode=0):
def perimiter(radius):
return 2 * pi * radius def area(radius):
return pi * (radius ** 2) if mode == 0:
return perimiter(radius)
elif mode == 1:
return area(radius)
circle(3,0)

三、函数对象

def foo():  # foo->函数的内存地址
print('from foo') x = 10 # x->10的内存地址 1、可以被赋值
y = x
f = foo
f() 2、可以当做参数传入
def f1(func):
print('====>f1')
func() f1(foo) # f1(函数的内存地址) 3、可以当做返回值
def f1(func):
return func f = f1(foo)
print(f) 4、可以当做容器类型的元素
x = 10
l = [x,foo,foo()]
print(l)
l[1]()

四、名称空间与作用域

名称空间Namespace:存放名字与内存地址绑定关系的地方
# 名称空间分三种:
1、内置名称空间:存放python解释器自带的名字
print(len)
print(input) 2、全局名称空间: 存放的是顶级的名字,如下x、z、f1、xxx都是
x = 100
def f1():
y = 200 if 10 > 3:
z = 300 if True:
xxx = 400 3、局部名称空间:存放的是函数内定义的名字
def f1():
x = 200 f1() # 重要结论1:局部Local-》外层函数Enclosing-》全局Global-》内置Builtin
# L->E->G->B 例1:
def f1():
# len = 200
print(len) len = 100 # 全局顶级代码 f1() print('=====>',len) 例2:LEGB
len = 100
def f1():
# len = 200 def f2():
# len = 300
print(len)
len = 1111111111111111111111111111111111111111111
f2() f1()
# 重要结论2:名称空间的嵌套关系是在函数定义阶段、扫描语法时就确定好的,与调用位置无关 例1:
len = 100
def f1():
# len = 200
def f2():
print(len) return f2 f = f1() # print(f) len = 6666666666666
f() 例2:
len = 100
def f1():
def f2():
print(len)
# len = 200 return f2 f = f1() def foo():
len = 77777
f() foo() 例3
x = 100 def f1():
print(x)
x = 200 f1() # 总结:
全局作用域:全局存活,全局有效
内置名字空间、全局名称空间 局部作用域:临时存活,局部有效
局部名称空间 =============》 global关键字
l = []
x = 100 def foo():
l.append(333) global x
x = 200 foo() print(l)
print(x) =============》 nonlocal关键字

五、闭包函数

闭函数:定义在函数内部的函数
def outter():
def wrapper():
print('====>wrapper') 包函数: 内部函数引用了一个来自于外层函数的变量
def outter():
x = 111
def wrapper():
print('====>wrapper',x)

day12 函数嵌套的更多相关文章

  1. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

  2. day12 函数的嵌套调用 闭包函数,函数对象

    函数嵌套: 函数嵌套: 嵌套指的是,一个物体包含另一个物体,函数嵌套就是一个函数包含另一个函数 按照函数的两个阶段 嵌套调用 指的是在函数的执行过程中调用了另一个函数,其好处可以简化外层大函数的代码, ...

  3. JavaScript ES7 中使用 async/await 解决回调函数嵌套问题

    原文链接:http://aisk.me/using-async-await-to-avoid-callback-hell/ JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题.以往在浏览器中, ...

  4. python之函数嵌套

    python很多特性与JavaScript是相似甚至相同的: 1. 无类型 2. 函数亦对象 .... 自然: python也允许函数嵌套, 这与JavaScript中函数闭包的作用一样....

  5. 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 $url = "http://www. ...

  6. Oracle之分组函数嵌套以及表连接

    --1 数据环境准备 scott 用户下面的emp,dept表 --2 要求 :求平均工资最高的部门编号,部门名称,部门平均工资 select d.deptno,d.dname,e.salfrom(s ...

  7. nodejs批量导入数据eventproxy(回调函数嵌套解决方案)使用实例

    回调函数嵌套解决方案——eventProxy API地址:https://github.com/JacksonTian/eventproxy 1.安装eventproxy 执行npm install ...

  8. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  9. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

随机推荐

  1. PHP笔记1__基础知识

    客户端: 美妙的网页组成(都是由浏览器解释): 1.HTML 2.CSS--给HTML化妆 3.客户端脚本编程语言(JavaScript等)--特效  服务器端: 1.Web服务器Apache/Ngi ...

  2. MarkDown学习随笔

    MarkDown语法的学习 标题 ​ 设置标题方法是在前面加#号,一级标题(最大)是加#+空格 ,二级标题是加##+空格,之后的以此类推. 字体 在文本的前后分别加上一个星号表示斜体字 在文本的前后分 ...

  3. 网关服务spring cloud zuul

    Zuul例子配置文件 spring.application.name=switch-gateway server.port=5555 请求路由 传统路由方式 zuul.routes.api-a-url ...

  4. 如何利用SimpleNVR建立全天候远程视频监控系统

    随着社会经济的发展,5G.AI.云计算.大数据.物联网等新兴技术迭代更新的驱动下,传统的安防监控早已无法满足我们的需求.那么我们如何建立全天候远程视频监控系统来替代传统监控呢?如何进一步优化城市管理. ...

  5. elasitcsearch单机版安装

    1.下载压缩包 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz 2.解压修改配置文件 c ...

  6. S2-002漏洞分析

    漏洞概述 Struts2-002是一个 XSS 漏洞,该漏洞发生在 <s:url> 和 <s:a>标签中,未对标签内字符进行转义,当标签的属性 includeParams=al ...

  7. Python - 一行代码查看当前操作系统默认的编码标准

    一句代码 在 cmd 中执行 > python3 -c 'import locale; print(locale.getpreferredencoding())' UTF-8

  8. c++ 中vector 常见用法(给初学者)

    c++ 中 vector vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片区域所能容纳的元素个数. ca ...

  9. 一文详解 OpenGL ES 3.x 渲染管线

    OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成.如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成.而组成圆锥的每一个三角形,其任意一个顶点由三维空间中 x.y ...

  10. Go语言核心36讲(Go语言实战与应用十二)--学习笔记

    34 | 并发安全字典sync.Map (上) 我们今天再来讲一个并发安全的高级数据结构:sync.Map.众所周知,Go 语言自带的字典类型map并不是并发安全的. 前导知识:并发安全字典诞生史 换 ...