在函数外,一开始被赋予变量值,可以被所有函数使用的变量,作用域为全局,称为全局变量
在函数内部,只能在函数内使用,称为局部变量
举例
name = "lian"#全局变量
def call():
name = "zong"# 局部变量
print(name) #输出『zong』
print(name)#输出『lian』
注:global必须写在全局变量修改前
name ="lian" #全局变量
def foo():
name ="zong"
print(name)
def bar():
global name #修改的为全局变量
name ="sheng" #局部变量
print(name)
bar()
print(name) #函数没有执行前,故打印的还是原局部变量name
foo() #执行函数
print(name) #函数执行后,修改了全局变量为name =sheng
name ="lian" #全局变量
def foo():
name ="zong"
print(name)
def bar():
nonlocal name #修改的为父级变量
name ="sheng"
print(name)
bar()
print(name) #函数没有执行前,故打印的还是原局部变量name
foo() #执行函数
print(name) #函数执行后,修改了全局变量为name =lian
变量的作用域有哪几种? L:local,局部作用域,即函数中定义的变量。 E: enclosing,嵌套父级函数的局部作用域,即包含此函数的上级的局部作用域,但不是全局的; G: global,全局变量,就是模块级别定义的变量。 B: built-in,系统固定模块里面的变量,比如 int,bytearray等。 搜索变量的优先级顺序依次为: 局部作用域 >外层作用域 >当前模块中的全局作用域 > python内置作用域,也就是 LEGB
x =int(1) #python内置作用域---->B
inpara =2 #当前模块中的全局变量--->G
def outfunc():
global inpara
print(inpara)
inpara = 3 #外层作用域 --->E
print(inpara)
def infunc():
inpara =4 #局部作用域 --->L
print(inpara)
infunc()
outfunc()
函数名-->函数内存地址;函数名()-->执行函数,并且获取返回值。
name ="lian"
def foo():
name ="zong"
def bar():
name = "sheng"
def mitt():
print(name)
return mitt
return bar
foo()()()
#相当于---------------
#bar =foo() #执行foo函数,并且获取bar函数内存地址,并且赋值给bar变量
#mitt =bar() #bar内存地址加括号->执行bar函数,并且获取mitt内存地址
#mitt() #mitt内存地址+括号-->执行mitt函数
如果变量作用域与函数调用位置有关的华,那么输出结果应该是lian,但是输出结果是sheng,这说明函数中变量的作用域与函数声明有关。