day12 函数嵌套
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 函数嵌套的更多相关文章
- day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义
复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...
- day12 函数的嵌套调用 闭包函数,函数对象
函数嵌套: 函数嵌套: 嵌套指的是,一个物体包含另一个物体,函数嵌套就是一个函数包含另一个函数 按照函数的两个阶段 嵌套调用 指的是在函数的执行过程中调用了另一个函数,其好处可以简化外层大函数的代码, ...
- JavaScript ES7 中使用 async/await 解决回调函数嵌套问题
原文链接:http://aisk.me/using-async-await-to-avoid-callback-hell/ JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题.以往在浏览器中, ...
- python之函数嵌套
python很多特性与JavaScript是相似甚至相同的: 1. 无类型 2. 函数亦对象 .... 自然: python也允许函数嵌套, 这与JavaScript中函数闭包的作用一样....
- 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)
在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 $url = "http://www. ...
- Oracle之分组函数嵌套以及表连接
--1 数据环境准备 scott 用户下面的emp,dept表 --2 要求 :求平均工资最高的部门编号,部门名称,部门平均工资 select d.deptno,d.dname,e.salfrom(s ...
- nodejs批量导入数据eventproxy(回调函数嵌套解决方案)使用实例
回调函数嵌套解决方案——eventProxy API地址:https://github.com/JacksonTian/eventproxy 1.安装eventproxy 执行npm install ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- python基础—函数嵌套与闭包
python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间 内置在解释器中的名称 2 全局名称空间 顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...
随机推荐
- usb设备无法识别
之前用飞线用旧板子飞线连接了一个wifi模块到usb0口上,调试ok的,现在新设计的板子回来了,wifi模块是连接在usb2口上的,系统起来后发现wlan0不存在,用lsusb查看wifi模块的usb ...
- best-time-to-buy-and-sell-stock-ii leetcode C++
Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...
- Python 检查当前运行的python版本 python2 python3
检查当前运行的python版本,可以帮助程序选择运行python2还是python3的代码 import sys if sys.version > '3': PY3 = True else: P ...
- 交换机 & 路由基础
以太网帧结构 Ethernet II帧结构 Ethernet_II帧类型值大于等于1536(0×0600) 以太网帧结构的长度在64-1518字节之间 帧各字段说明 目的MAC地址(DMAC):接收方 ...
- PTA 7-3 树的遍历 (25分)
PTA 7-3 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点 ...
- 第三天 while循环 及其用法
(1)语法格式:while 条件: ..... 语法二:while 条件: break # 跳出当前循环 语法三:while 条件: else # 当while循环正常结束时执行该语句:只有程 ...
- java读取大文件内容到Elasticsearch分析(手把手教你java处理超大csv文件)
现在需要快算分析一个2g的csv文件: 基于掌握的知识,使用java按行读取文件,批量导入数据到es, 然后利用es强大的聚合能力分析数据,2个小时搞定! package com.example.de ...
- java更开源-安全可靠国产系统背景下的应有.NET Core的一席之地
"安可"背景下的中国软件开发 在中美当前背景下的安全可靠国产系统(简称安可),安可产业要实现技术自主可控,需要在四个层面逐步实现:基础硬件设施,如芯片.服务器.存储.交换机.路由器 ...
- Java设计模式之(三)——建造者模式
1.什么是建造者模式 Separate the construction of a complex object from its representation so that the same co ...
- 使用pmml实现跨平台部署机器学习模型
一.概述 对于由Python训练的机器学习模型,通常有pickle和pmml两种部署方式,pickle方式用于在python环境中的部署,pmml方式用于跨平台(如Java环境)的部署,本文叙述的 ...