zoukankan      html  css  js  c++  java
  • Python命名空间和作用域

    Python命名空间和作用域

    总结

    emmm,这一块讲了2个内容,一个是命名空间,一个是作用域。一个一个说吧

    命名空间

    A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries

    上边这段是官方文档定义的,简单来说就是名字到对象的映射,我们知道,python的一切都是对象,你所定义的变量名其实只是个引用。这样就好理解了。python的命名空间由python数据结构字典实现。
    python的命名空间细分的话有三种。如图所示。

    这一部分没什么好说的,重要的是理解其概念

    作用域

    A scope is a textual region of a Python program where a namespace is directly accessible. "Directly accessible" here means that an unqualified reference to a name attempts to find the name in the namespace.

    由官方文档可以看出,作用域就是可以直接访问的区域。就是全局到局部。这里举个代码例子就行了。

    #demo.py
    
    global_var='haha'   #定义全局变量
    
    def tool():
        local_var='local'   #局部变量
        print(local_var)    #访问局部变量,可以访问
    
    print(global_var)   #访问全局变量,可以访问
    print(local_var)    #访问局部变量,找不到,无法访问
    

    惊喜知识

    这一部分的惊喜知识是跟作用域有关的。学到了2个关键字globalnonlocal

    global_var='haha'   #定义全局变量
    
    def tool():
        global_var='22'
        print(global_var)
    
    print(global_var)   #访问全局变量,可以访问
    tool()
    

    这段代码输出了2个global_var。输出结果是不一样的。tool函数里在局部修改了global_var的值,并不影响全局。此时如果你想影响全局,你就需要用到关键字global.

    global_var='haha'   #定义全局变量
    
    def tool():
        global global_var
        global_var='22'
        print(global_var)
    
    tool()
    print(global_var) 
    

    这样就好了。
    nonlocal作用类似,用来修改嵌套作用域的。

    def tool():
        var=1
        def inner():
            nonlocal var
            var=2
            print(var)
        inner()
        print(var)
    tool()
  • 相关阅读:
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    57.深度优先搜索 广搜练习:迷宫(未结题)
    UPC10525: Dove 打扑克
    UPC10532: 花
    UPC10544: 凉宫春日的叹息
    UPC3459: 移除字符
    UPC3457: Next K Permutation
  • 原文地址:https://www.cnblogs.com/funmary/p/13425544.html
Copyright © 2011-2022 走看看