美文网首页
Python篇-函数(二)函数结构与存储

Python篇-函数(二)函数结构与存储

作者: TianTianBaby223 | 来源:发表于2018-10-08 15:59 被阅读13次

    一 : 全局变量与局部变量

    • 全局变量,函数内部直接使用
    name = "雪芙"
    def change_name1():
        print(name)
    change_name1()
    
    雪芙
    
    • 函数内部的局部变量
    NAME = '百百'
    
    def fun1():
        name = "HUAHA"
        print(name)
    
        def fun2():
            name = "雪芙"
            print(name)
    
            def fun3():
                name = "微微"
                print(name)
    
            print(name)
            fun3()
    
        fun2()
        print(name)
    fun1()
    
    
    HUAHA
    雪芙
    雪芙
    微微
    HUAHA
    
    • global
    name = "雪芙"
    def chang_name():
        global name
        name = "百百"
        print(name)
    chang_name()
    print(name)
    
    百百
    百百
    

    使用global相当于引用了外部全局变量,无论有多少层,指向最外部的全局变量.

    name = "000层"
    def fun1():
        name = "111层"
    
        def fun2():
            # 不管有多深都指向全局name
            global name
            name = "我是海王"
    
        fun2()
        print(name)
    
    
    print(name)
    fun1()
    print(name)
    
    000层
    111层
    我是海王
    
    • nonlocal
      引用上一层变量,如果没有就继续往上直到找到为止
    name = "000层"
    def fun1():
        name = "111层"
        def fun2():
            # 指的是上一级变量
            nonlocal name
            name = "金刚狼"
        fun2()
        print(name)
    print(name)
    fun1()
    print(name)
    
    • 全局是可变类型,局部可对其进行修改
      局部重新定义的话,就变成局部变量啦.
    names = ['雪芙', '曼丽', '思思']
    
    def change_name2():
        names.append('hello')
        print("我要你",names)
    change_name2()
    print(names)
    
    我要你 ['雪芙', '曼丽', '思思', 'hello']
    ['雪芙', '曼丽', '思思', 'hello']
    

    二 : 函数存储结构

    函数也是一种变量,变量名相当于变量名,函数体相当于值.
    相当于定一个函数体,放在内存中,对应的变量名是foo,又定义了一个函数体放在内存中,变量为bar.
    当调用foo时候找到相应的代码,指执行print('from foo')又执行bar()此时可以找到对应的代码并且执行

    def foo():
        print('from foo')
        bar()
    
    def bar():
        print('bar')
    foo()
    
    from foo
    bar
    

    报错
    与javaScript不同,python没有预编译,不能把函数定义代码自动放到调用前面,所以,函数在调用foo时找不到bar()对应的代码,就报错了

    def foo():
        print('from foo')
        bar()
    foo()
    def bar():
        print('bar')
    
    NameError: name 'bar' is not defined
    

    相关文章

      网友评论

          本文标题:Python篇-函数(二)函数结构与存储

          本文链接:https://www.haomeiwen.com/subject/qdjjoftx.html