函数二----函数的进阶

Posted 笨笨侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数二----函数的进阶相关的知识,希望对你有一定的参考价值。

一、命名空间(有三种)

  1.内置的命名空间   -----python解释器

    就是python解释器一启动就可以使用的名字存储再内置的命名空间中

    内置的名字在启动解释器的时候被加载进内存里。

  2.全局命名空间    -----我们写的代码,但不是函数中的代码

    是在程序从上到下被执行的过程中依次加载进内存的

    放置了我们设置的所有变量名和函数名

  3.局部命名空间   -----函数

    就是函数内部定义的名字

    当调用函数的时候,才会产生这个名称空间,随着函数执行的结束,这个命名空间就又消失了

 

 三种命名空间之间的加载顺序:

   内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

 

#在局部:可以使用全局、内置命名空间中的名字
#在全局:可以使用内置命名空间中的名字,但是不能用局部中命名空间中的名字
#在内置:不能使用全局、局部命名空间中的名字
def func():
    a = 1
func()
print(a)   #因为全局没有a这个变量,它不可能去找func函数里的这个a变量,所以会报错
#在正常情况下,直接使用内置的名字
#当我们在全局定义了和内置名字空间中同名的名字时,会使用全局的名字
#当我自己有的时候,我就不找我的上级要了
#如果自己没有,就找上一级要,上一级没有再找上一级,如果内置的名字空间都没有,就报错
#多个函数应该拥有多个独立的局部命名空间,不互相共享
def input():
    print(in input now)

def func():
    # input = 1
    print(input)
func()    # <function input at 0x0000028967220378>  ---函数的内存地址()

#func  ---> 函数的内存地址
#函数名()  --->函数的调用
#函数的内存地址()   --->函数的调用

二、作用域

#全局作用域  ---作用在全局 ---内置和全局名字空间中的名字都属于全局作用域---globals()
#局部作用域 --- 作用在局部 --- 函数(局部名字空间中的名字属于局部作用域)---locals可以查看
a = 1
def func():
    return a
print(func())  # 1

a = 1
def func():
    global a
    a += 1
func()
print(a)  #2
func()
print(a)  #3

a = 1
def func(a):
    a = 2
    return a
a = func(a)
print(a)  #2
#对于不可变数据类型,在局部可以查看全局作用域中的变量,但是不能直接修改
#如果想要修改,需要在程序的一开始添加global声明
#如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局变量有效
a = 1
b = 2
def func():
    x = aaa
    y = bbb
    print(locals())  # {‘x‘: ‘aaa‘, ‘y‘: ‘bbb‘}
    print(globals())

func()
print(globals())
print(locals())  #本地的,放在全局,全局就是本地;放在局部,局部就是本地
#globals  永远打印全局的名字
#locals 输出什么,根据locals所在的位置

以上是关于函数二----函数的进阶的主要内容,如果未能解决你的问题,请参考以下文章

C语言进阶学习笔记二指针的进阶(重点必看+代码演示+练习)

python进阶第1篇 函数入门

python函数之进阶 函数嵌套,命名空间,闭包

Python函数之进阶二

二.函数进阶

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段