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

函数的作用域搞不清楚,整个函数就白学了! 高级函数装饰器就肯定学不会!
函数体内部出现变量定义, 代表意义重大;
本章总结:
- 函数作用域:全局作用域(外部)、外部作用域(函数体第一层)、内部作用域;(自己定义的分类)
变量分类:全局变量,本地变量- 内部、外部作用域对全局来说,是不可见的;全局对内部、外部是可见的;
- x=x+1 即是赋值定义;
- (领地意识):内部作用域中,一旦出现 x=(赋值定义) ,就等于这个x的作用域出现在整个外部作用域;与函数体外的变量 无关;_函数中最常见的错误之一;
- 函数体内部中,程序运行是有顺序的;不能先打印,后赋值;
函数常见错误:
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
网友评论