Python Day11

一 命名空间

命名空间也叫做名称空间

 内置名称空间:人家直接写好的,我们直接就可以调用的,就叫做内置名称空间

 全局变量:除了函数内部定义的内容外,自己写的代码就叫做全局变量

 局部变量:在函数内部定义的内容,就叫做局部名称空间

a=1       #全局变量
def func():
    a=2       #局部变量
    def func1():
        a=3        #局部里的局部变量
        print(a)
    func1()
    print(a)      #print:就属于内置的名称空间
func()
print(a)

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

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

取值:

  在局部调用:局部命名空间->全局命名空间->内置命名空间

 

x = 1
def f(x):
    print(x)

print(10)

输出结果

10

      在全局调用:全局命名空间->内置命名空间

x = 1
def f(x):
    print(x)

f(10)
print(x)

print(max)


输出结果

10
1

在全局是不可以直接调用局部的变量,局部变量只能在低于该层和该层的函数去调用,而在局部是可以调用全局的变量的

a=1       #全局变量
def func():
    def func1():
        print(a)
    func1()
    print(a)
func()
print(a)

输出结果
1
1
1

在全局内部可以同时创建多个同等级的局部命名空间,而这些命名空间之间是没有关系的

a=1
def wahaha():
    a=2
    print(a)
def shuangwaiwai():
    print(a)
wahaha()
shuangwaiwai()

输出结果
2
1

作用域

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

局部作用域:局部名称空间,只能在局部范围内生效

globals和locals方法

global:就是在局部里面修改全局的变量值

 

 

a=0
def aa():
    a=1
    def bb():
        global a     #global:在局部变量修改全局变量的值
        a=2

        print(a)
    bb()
    print(a)
aa()
print(a)

输出结果
2
1
2

 

nonlocal:只修改局部的变量值,从该层的上一层一层一层的查找,找到第一个并修改

a=0
def aa():
    a = 2
    def cc():
        def bb():
            nonlocal a    #总结:只修改局部的变量值,从该层向外层找到第一个并修改
            a=1
            print(a)
        bb()
        print(a)
    cc()
    print(a)
aa()
print(a)

输出结果
1
1
1
0

先有了作用域,才有了名称空间

 什么是全局作用域:从调用的那层向外层一层一层的查找需要调用的内容,直到找到第一个,就会停止查找

 

 

二 函数名

 

 直接用print打印函数名,不加上括号,结果打印出来会是这个函数的内存地址和函数名

 

   函数名就是一个内存地址,相当于就是一个变量

def wahaha():
    print(123)
print(wahaha)


输出结果
<function wahaha at 0x0000000001FD3E18>

函数名可以赋值,也可以作为其他容器的元素

def func():
    print('alex_aa')
print(func)
a=func
print(a)
a()
l=[func]
print(l)
l[0]()

输出结果

<function func at 0x0000000002093E18>
<function func at 0x0000000002093E18>
alex_aa
[<function func at 0x0000000002093E18>]
alex_aa

函数名还可以作为函数的返回值或者参数

def wahaha():
    name='alex'
    def shuangwaiwai():
        print(name)
    return shuangwaiwai
yousanru=wahaha()
yousanru()

输出结果
alex

三, 三元表达式

 三元表达式就是将一些简单的执行语句用更简单的代码写出来

  比如:执行结构=判断语句成立的执行语句   if   判断语句   else   判断语句不成立的执行语句

a=10
b=9
c=a if a>b else b
print(c)

输出结果
10

四 闭包函数

 闭包函数一定要用到嵌套函数

 什么是闭包函数:内部函数引用了外部函数的变量,这个内部函数就叫做闭包函数,闭包就是一种函数

def wahaha():
    name='dadada'
    def shuangwaiwai():    #这个函数就是闭包函数
        print(name)
    shuangwaiwai()
wahaha()

输出结果

dadada

 

posted @ 2017-08-30 17:53  大象和骆驼  阅读(160)  评论(0编辑  收藏  举报