函数的嵌套调用

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--函数嵌套 命名空间的更多相关文章

  1. 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归

    孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...

  2. python函数对象-命名空间-作用域-02

    函数对象 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数对象的特性(*****灵活运用,后面讲装饰器会用到) 函数名可以像变量一样被传递 # 变量可以被传递 name = 'jason' ...

  3. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  4. python函数嵌套的实用技术

    def fun(): def fun1(): print () fun1() fun() fun1()#总结老男孩python里面讲过,这个是函数的嵌套,很有用, #效果就是给函数一个自己的小函数.然 ...

  5. python函数嵌套定义

    python的这个特性是很特别的,与C#和C++都不一样.请看下面的例子 def outFun(): def innerFun_0():#1.在内部定义一个函数 print("i am fi ...

  6. day16 Python 函数嵌套函数和作用域

    #函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 name = 'alex' def foo(): name='linhaifeng' def bar(): #name='wu ...

  7. Python 函数嵌套

    def mumber(a):      def add(b):              return a*b      return add if __name__=="__main__& ...

  8. 五年级--python函数高级运用

    一.装饰器 二.迭代器 三.生成器 四.练习 一.装饰器 1.1 闭包函数用法 # 需求: # 执行一个函数前需要认证是否登录,如果登录则不需再登录. # 只认证一次,后续操作无需认证 # 要求认证使 ...

  9. 四年级--python函数基础用法

    一.函数的定义,调用和返回值 1.1 语法 def 函数(参数一,参数二...): ''' 文档注释 ''' 代码逻辑一 代码逻辑二 .... return 返回值 1.2 定义函数的三种形式 说明: ...

  10. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

随机推荐

  1. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)——A - Bear and Three Balls(unique函数的使用)

    A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. BZOJ-2829 信用卡凸包

    凸包题. 我们先把所有信用卡的四个定点的坐标求出来,然后计算凸包长度,最后加上一个圆的周长就行. #include <cstdlib> #include <cstdio> #i ...

  3. HDU-2236 无题II

    选取不同列不同行的N个数...明摆着叫你二分匹配 二分答案,然后枚举边的范围并跑匈牙利,以此判断答案范围. #include <cstdlib> #include <cstdio&g ...

  4. 洛谷P1418 选点问题

    P1418 选点问题 74通过 240提交 题目提供者tinylic 标签云端 难度普及+/提高 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 非常重要!! 90分的点这里 题 ...

  5. java面试题之@Autowired和@Resource的区别

    @Autowired和@Resource的区别: 1.都可以用来装配bean,都可以写在字段或者方法上: 2. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果允许为nul ...

  6. cf359D Pair of Numbers

    Simon has an array a1, a2, ..., an, consisting of n positive integers. Today Simon asked you to find ...

  7. css3 实现居中的9中方法

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 37深入理解C指针之---结构体与指针

    一.结构体与指针 1.结构体的高级初始化.结构体的销毁.结构体池的应用 2.特征: 1).为了避免含有指针成员的结构体指针的初始化复杂操作,将所有初始化动作使用函数封装: 2).封装函数主要实现内存的 ...

  9. 快充 IC BQ25896 如何判斷 手機插著 adapter 充電器時,adapter Iout 大於限制,adapter Vout 小於 限制,導致 battery 不但沒充電且還需放電。

    若電池在 放電時,ICHGR 為0. 若電池在 充電時,ICHGR有變化.   下面有寫到 charge current 所以不是 discharge current   狀況:           ...

  10. vsCode 开发微信小程序插件

    用 vsCode 开发微信小程序可以配置以下插件,让开发更美好: 1. vscode weapp api 2. vscode wxml 3. vscode-wechat 4. Easy WXLESS ...