一 : 全局变量与局部变量
- 全局变量,函数内部直接使用
name = "雪芙"
def change_name1():
print(name)
change_name1()
雪芙
- 函数内部的局部变量
NAME = '百百'
def fun1():
name = "HUAHA"
print(name)
def fun2():
name = "雪芙"
print(name)
def fun3():
name = "微微"
print(name)
print(name)
fun3()
fun2()
print(name)
fun1()
HUAHA
雪芙
雪芙
微微
HUAHA
- global
name = "雪芙"
def chang_name():
global name
name = "百百"
print(name)
chang_name()
print(name)
百百
百百
使用global相当于引用了外部全局变量,无论有多少层,指向最外部的全局变量.
name = "000层"
def fun1():
name = "111层"
def fun2():
# 不管有多深都指向全局name
global name
name = "我是海王"
fun2()
print(name)
print(name)
fun1()
print(name)
000层
111层
我是海王
- nonlocal
引用上一层变量,如果没有就继续往上直到找到为止
name = "000层"
def fun1():
name = "111层"
def fun2():
# 指的是上一级变量
nonlocal name
name = "金刚狼"
fun2()
print(name)
print(name)
fun1()
print(name)
- 全局是可变类型,局部可对其进行修改
局部重新定义的话,就变成局部变量啦.
names = ['雪芙', '曼丽', '思思']
def change_name2():
names.append('hello')
print("我要你",names)
change_name2()
print(names)
我要你 ['雪芙', '曼丽', '思思', 'hello']
['雪芙', '曼丽', '思思', 'hello']
二 : 函数存储结构
函数也是一种变量,变量名相当于变量名,函数体相当于值.
相当于定一个函数体,放在内存中,对应的变量名是foo
,又定义了一个函数体放在内存中,变量为bar.
当调用foo
时候找到相应的代码,指执行print('from foo')
又执行bar()
此时可以找到对应的代码并且执行
def foo():
print('from foo')
bar()
def bar():
print('bar')
foo()
from foo
bar
报错
与javaScript不同,python没有预编译,不能把函数定义代码自动放到调用前面,所以,函数在调用foo
时找不到bar()
对应的代码,就报错了
def foo():
print('from foo')
bar()
foo()
def bar():
print('bar')
NameError: name 'bar' is not defined
网友评论