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: 位置参数动态传参, ...
随机推荐
- 说说IO(一)- IO的分层
IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后,瓶颈往往落在数据库:而数据库经过多种优化以后,瓶颈最终会落到IO.而IO性能的发展,明显落后于CPU的发展.Memchached也好, ...
- jquery 遍历find()与children()的区别
find():返回被选元素的后代元素.后代是子.孙.曾孙,依此类推. http://blog.csdn.net/zm2714/article/details/8117978 http://www.jb ...
- La 4670 AC自动机(模版)
#include<iostream> #include<cstring> #include<queue> #include<cstdio> #inclu ...
- hdu 1065(推公式)
I Think I Need a Houseboat Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- LeetCode OJ--Minimum Path Sum **
https://oj.leetcode.com/problems/minimum-path-sum/ 对一个grid从左上角到右下角的路径,求出路径中和最小的. 受之前思路的影响,就寻思递归,并且记录 ...
- echarts 金字塔
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- k8s之Service资源
1.Service概述 service是kubernetes中最核心的资源对象之一,service和pod之间是通过Label串起来,相同的Service的pod的Label是一样的.同一个servi ...
- free如何知道释放内存长度:vs与glibc分配内存时编译器内部处理
鉴于网上这个资料实在太少,将以前整理过却未完全的一篇文章贴出来,希望大牛指正vs下内存管理方式.可联系gaoshiqiang1987@163.com vs分配内存 vs没有源码,编译器在分配内存时,分 ...
- Java多线程中Lock的使用
Jdk1.5以后,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,可能大家都会想到synchronized关键字, 这是java内置的关键字, ...
- JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)
概述 说明 JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. JRoll第二版是 ...