美文网首页Python全栈工程师
15.2-函数作用域(变量的领地意识)

15.2-函数作用域(变量的领地意识)

作者: BeautifulSoulpy | 来源:发表于2019-09-16 17:30 被阅读0次

记住,宁可辛苦,也不要贪图享乐。宁可装穷,也不要炫耀财富。宁可光输,也不要只赢不输。宁可吃亏,也不要占小便宜。宁可平庸,也不要沽名钓誉。宁可自信,也不要盲目悲观。宁要健康,也不要功名利禄。宁可勤奋,也不能无所事事。宁可偏执,也不能放弃理想!

函数的作用域搞不清楚,整个函数就白学了! 高级函数装饰器就肯定学不会!

函数体内部出现变量定义, 代表意义重大;

本章总结:

  1. 函数作用域:全局作用域(外部)、外部作用域(函数体第一层)、内部作用域;(自己定义的分类)
    变量分类:全局变量,本地变量
  2. 内部、外部作用域全局来说,是不可见的;全局对内部、外部是可见的;
  3. x=x+1 即是赋值定义;
  4. (领地意识):内部作用域中,一旦出现 x=(赋值定义) ,就等于这个x的作用域出现在整个外部作用域;与函数体外的变量 无关;_函数中最常见的错误之一;
  5. 函数体内部中,程序运行是有顺序的;不能先打印,后赋值;
函数常见错误:
1. 变量的赋值:
函数内 x = x+1,x相当于要被赋值,但在函数内部,变量x还没被赋值,或者在函数外部已经被赋值了;报错

1. 函数的作用域^***

函数的作用域:函数的可见范围(变量的领地);内外层的函数作用域不同,非常重要;
标识符的可见范围,就是标识符的作用域,一般常说的是变量的作用域;

作用域(scope)是变量(variable)的重要特性之一。

变量作用域决定了哪一部分程序可以访问某个特定的变量,即为对一个变量的「访问权限」。

函数作用域的特征:

1.函数内部的标识符对外部是不可见的;外部的变量对内部是可见的;

1.函数内部的标识符对外部是不可见的;

def outer():
    def inner():
        print("inner")
    print("outer")
    inner()
    a = 1000
outer()
-------------------------
outer
inner

函数体中常见的错误 1:
x = 5
def show():
    x += 1
    print(x)
show()
------------------------------------------------------
----> 4     print(x)
UnboundLocalError: local variable 'x' referenced before assignment
错误的原因在于print(x)时,解释器会在局部作用域找,
会找到 x=5(函数已经加载到内存),但x使用在声明前了,所以表明;x 在函数内还没被赋值;


x = 5
def show():
    print(x)
    x += 1    # 一旦出现 x= ,就等于这个x的作用域出现在整个外部作用域;
show()
------------------------------------
UnboundLocalError: local variable 'x' referenced before assignment

#函数体内部中,程序运行是有顺序的;
x = 5
def show():
    print(x)
    x=50
show()
------------------------------------
UnboundLocalError: local variable 'x' referenced before assignment


x = 5
def foo():
    y=x+1      #函数使用前一定要先定义;
    x=1
    print(x)
foo()
------------------------------------
UnboundLocalError: local variable 'x' referenced before assignment


2. 作用域的分类

Python中的作用域分4种情况:

L:local,局部作用域,即函数中定义的变量(局部变量);
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:globa,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等

搜索变量的优先级顺序依次是作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB

x = 500 #全局变量;
def fn1():
    x = 1 #局部作用域;在fn1 内;
    print(x)
def fn2():
    print(x)  #x可见吗
print(x)   #x可见吗?
fn1()
print('--------')
fn2()
---------------------------------
500
1
--------
500

# 只要出现赋值语句,变量就成本地变量了;
看看自己有没有;
def outer2():
    o = 65
    def inner():
        o = 97
        print('inner',o)
        print(chr(o))
    print('outer',o)
    inner()
    print(' outer position2 = ',o)
outer2()
---------------------
outer 65
inner 97
a
 outer position2 =  65

相关文章

  • 15.2-函数作用域(变量的领地意识)

    记住,宁可辛苦,也不要贪图享乐。宁可装穷,也不要炫耀财富。宁可光输,也不要只赢不输。宁可吃亏,也不要占小便宜。宁可...

  • Scope

    1. 全局作用域 全局变量拥有全局作用域 2. 函数作用域 在函数内声明的变量用于函数作用域。在函数体内,局部变量...

  • Python函数复习

    本章重点: 掌握函数参数传递 变量的作用域 lambda函数 函数定义: 一、变量的作用域 作用域顾名思义是指变量...

  • 函数作用域&&作用域链

    注意:函数作用域和变量作用域并不是一个概念,在学习函数作用域时可以先暂时忘记变量作用域的概念。 怎么理解函数作用域...

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

  • JavaScript作用域、作用域链

    作用域 变量或函数可以发生作用的区域即是作用域。 作用域的最大用途就是隔离变量或函数,并控制变量或函数的生命周期,...

  • JS作用域链

    作用域 变量的作用域 变量的作用域有两种:全局变量和局部变量。 全局作用域: 最外层函数定义的变量拥有全局作用域,...

  • 闭包的实现原理

    作用域和作用域链 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 全局变量 变量在函数外定...

  • JS高级知识点汇总

    1.作用域 局部作用域:函数内部就是局部作用域。 ①在局部作用域申明的变量称为局部变量,局部变量只能在当前函数内部...

  • 作用域链

    作用域 变量或函数可以发生作用的区域即是作用域。作用域的最大用途就是隔离变量或函数,并控制变量或函数的生命周期,超...

网友评论

    本文标题:15.2-函数作用域(变量的领地意识)

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