python--函数嵌套 命名空间
函数的嵌套调用
def func():
print(123)
def func2():
func()
print(345)
func2()
#结果:123 345
函数的嵌套定义
def func():
print(123)
def func2():
print(234)
func()
#结果:123
无法调用func2而且结果也不会调用func2 外面也无法调用func2因为在func里面
为了保证某些功能特有的函数不被其他人随意调用
def func(a,b,c):
print(a,b,c)
def func2(a,b,c):
print(a,b,c)
func2(a,b,c)
func(3,2,1)
想要令嵌套的函数可以获取值,需要从主函数里面获取变量值再从子函数里面接收传参
想要传多个参数从主函数到子函数
def func(*args,**kwargs):
def func2(*args,**kwargs):
print(args,kwargs)
func2(*args,**kwargs)
func(1,3,5,5,6,c=1,b=3)
这样可以令里面的子函数获取到主函数接收到的实参
三元计算
c =a if a>b else b:
命名空间
a=1
b=0
def name():
def max():
都是全局命名空间 全局命名空间全局都能用
def name(a,b):
ab是局部命名空间
局部命名空间的独立的 只在函数里面用
对于局部来说,自己有的时候用自己的,自己没有再用全局的
内置命名空间
启动python就能用的就在内置命名空间里面
如 print def 等
打开代码先加载内置命名空间,再加载全局命名空间---从上到下顺序加载
调用该函数的时候加载局部命名空间
内置命名空间任意地方都可以用
应用例如:
a=1
def demo1():
a=3
def demo2():
a=2
print(a)
demo2()
print(a)
demo1()
print(a)
进来获取了全局的a=1,然后调用了demo1然后进入函数demo1
定义了a=3不过里面又有了函数demo2里面的a找到函数中的值2
打印2
然后打印了a=3,然后打印全局的1
结果 231
globals()全局里面变量在哪值是什么
locals()查函数自己的变量在哪值什么
global a 这样可以改变全局变量
nonlocal a 改变上一层的变量变成本函数变量
函数的名字 可以当做变量使用 是第一类对象的概念
首先是一个函数的内存地址
可以赋值,可以作为其他列表等容器类型的元素
可以作为函数的参数,返回值
例子1:
def func():
print(123)
def fun2():
print(456)
def fun3():
print(789)
li=[]
a = func
b = fun2
c = fun3
li=[a,b,c]
li[1]()
例子2:
def func():
print(123)
def func2(aaa):
aaa()
func2(func)
结果是123
例子3:
def func():
print(123)
def func2():
return func
ret = func2()
ret()
闭包
内部函数引用了外部函数的变量,那么这个时候内部的函数叫做闭包
def func():
name = 'egon'
def inner():
print(name)
print(inner._closure_)
func()
inner是闭包,,closure检查是不是闭包
例子:
def func():
name='egon'
def inner():
print(name)
return inner
inner = func()
inner()
能把嵌套函数里面的函数调用
闭包的应用
装饰器是闭包的一种应用
闭包的作用:
节省内存
如果不用闭包,每次输出都会创建一个变量并销毁,闭包的话变量只创建一次
节省内存并且不会因为全局变量容易改变而害怕改变
python--函数嵌套 命名空间的更多相关文章
- 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...
- python函数对象-命名空间-作用域-02
函数对象 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数对象的特性(*****灵活运用,后面讲装饰器会用到) 函数名可以像变量一样被传递 # 变量可以被传递 name = 'jason' ...
- 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...
- python函数嵌套的实用技术
def fun(): def fun1(): print () fun1() fun() fun1()#总结老男孩python里面讲过,这个是函数的嵌套,很有用, #效果就是给函数一个自己的小函数.然 ...
- python函数嵌套定义
python的这个特性是很特别的,与C#和C++都不一样.请看下面的例子 def outFun(): def innerFun_0():#1.在内部定义一个函数 print("i am fi ...
- day16 Python 函数嵌套函数和作用域
#函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 name = 'alex' def foo(): name='linhaifeng' def bar(): #name='wu ...
- Python 函数嵌套
def mumber(a): def add(b): return a*b return add if __name__=="__main__& ...
- 五年级--python函数高级运用
一.装饰器 二.迭代器 三.生成器 四.练习 一.装饰器 1.1 闭包函数用法 # 需求: # 执行一个函数前需要认证是否登录,如果登录则不需再登录. # 只认证一次,后续操作无需认证 # 要求认证使 ...
- 四年级--python函数基础用法
一.函数的定义,调用和返回值 1.1 语法 def 函数(参数一,参数二...): ''' 文档注释 ''' 代码逻辑一 代码逻辑二 .... return 返回值 1.2 定义函数的三种形式 说明: ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
随机推荐
- 基于 K8S 构建数据中心操作系统
在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...
- rest-framwork官方文档教程(一)
该项目是按照官网quickstart进行的,具体也可查看rest-framework官网: https://www.django-rest-framework.org/tutorial/quickst ...
- win 7 取得最高权限
以管理员身份运行cmd,然后输入: net user administrator /active:yes 然后注销,就会看到你原来的用户已经是最高权限的用户了.以后做的操作都是最高权限的操作.
- caffe编译新问题
我在一台机子上,配置第二个caffe的时候,复制之前的Makefile文件,直接 make all 居然报错了报错如下 ndefined reference to cv::imread(cv::Str ...
- JDBC链接mysql,时间时0000-00-00 00:00:00时报错
应为mysql默认最小timestamp是0001-01-01 00:00:00,所以查询出来会报错 需要加在链接的url中加入 &zeroDateTimeBehavior=convertTo ...
- python:print含有中文的list
Python 的 List 如果有中文的话, 会印出 \xe4\xb8... 等等的编码(如下所示), 要如何印出中文呢? >>> a = ['中文', 'ab']>>& ...
- bzoj 4007 树形dp
题目大意 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下层的公民即叶子节 ...
- gcc 编译时 库链接
gcc -l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把 ...
- bq25896 IINDPM 及 無 IINDPM 時的 regsiter
無 IINDPM status 有 IINDPM status [bq25890 reg@][0x0]=0x5d[0x1]=0x6[0x2]=0x91[0x3]=0x1a[0x4]=0x8[0 ...
- iOS开发之手势gesture详解(一)
前言 在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象 ...