• Python-17-作用域


    python有一个名为vars的内置函数,它返回变量关联的不可见的字典:
    >>> x = 1 
    >>> scope = vars() 
    >>> scope['x'] 
    >>> scope['x'] += 1 
    >>> x 
    2
    一般而言,不应修改vars返回的字典,因为根据Python官方文档的说法,这样做的结果是不确定的。
     
    如果有一个局部变量或参数与你要访问的全局变量同名,就无法直接访问全局变量,因为它被局部变量遮住了。
    如果需要,可使用函数globals来访问全局变量。这个函数类似于vars,返回一个包含全 局变量的字典。(locals返回一个包含局部变量的字典。)
    >>> def combine(parameter): 
    ...      print(parameter + globals()['parameter']) 
    ... 
    >>> parameter = 'berry' 
    >>> combine('Shrub') 
    Shrubberry
     
    重新关联全局变量(使其指向新值)
    >>> x = 1 
    >>> def change_global(): 
    ...      global x 
    ...      x = x + 1 
    ... 
    >>> change_global() 
    >>> x 
    2
     
    Python函数可以嵌套,嵌套通常用处不大,但有一个很突出的用途:使用一个函数来创建另一个函数
     
    def multiplier(factor):    
        def multiplyByFactor(number):     
            return number * factor    
        return multiplyByFactor
     
    注意这里外面的函数返回的是里面的函数,是返回一个函数,而没有调用
     
    >>> double = multiplier(2) 
    >>> double(5) 
    10 
    >>> triple = multiplier(3) 
    >>> triple(3) 
    >>> multiplier(5)(4) 
    20
     
    像multiplyByFactor这样存储其所在作用域的函数称为闭包。 通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用关键字nonlocal。 这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值
  • 相关阅读:
    5.14每日一题题解
    5.13 每日一题题解
    5.12 每日一题题解
    5.11 每日一题题解
    5.10每日一题题解
    【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】
    【POJ1509】Glass Beads 【后缀自动机】
    【codevs3160】 LCS 【后缀自动机】
    【HDU4734】F(x) 【数位dp】
    【hdu6148】Valley Numer【数位dp模板题】
  • 原文地址:https://www.cnblogs.com/swefii/p/13179274.html
Copyright © 2020-2023  润新知