全局作用域与局部作用域
x = 55
def func():
x =99
print(x)
print('全局变量x:',x)
print('函数内变量x:')
func()
输出:
全局变量x: 55
函数内变量x:
99
局部作用域Local不能修改全局作用域Global的变量
函数内调用全局变量
x = 55
def func():
global x
x =99
print(x)
print('全局变量x',x)
print('函数内变量x:')
func()
print('全局变量x',x)
输出:
全局变量x 55
函数内变量x:
99
全局变量x 99
使用global关键字可声明全局变量
外层作用域与局部作用域
def func():
x = 1
def nested():
x = 2
print(x)
nested()
print(x)
func()
输出:
2
1
局部作用域Local不能修改封装作用域Enclosure(外层函数)的变量
局部作用域调用外层作用域变量
def func():
x = 1
def nested():
nonlocal x
x = 2
print(x)
nested()
print(x)
func()
输出:
2
2
使用nonlocal关键字可声明外层作用域变量
向函数传递不可变类型
def change_number(x):
x += 1
x = 1
print('x={}'.format(x))
change_number(x)
print('x={}'.format(x))
输出:
x=1
x=1
def change_str(s):
s = 'abc'
str = 'a'
print(str)
change_str(str)
print(str)
输出:
a
a
向函数传递不可变类型如代码中的整型、字符串时,是生成副本传递给函数,函数内是对副本进行操作,不影响原始值
向函数传递可变类型
def change_list(l):
l[0] = 1
l = ['a','b','c']
print('原始列表:',l)
change_list(l)
print('操作后列表',l)
输出:
原始列表: ['a', 'b', 'c']
操作后列表 [1, 'b', 'c']
向函数传递可变类型如列表、字典表时,是引用传递方式,函数内的操作会影响原始值
传递可变类型时不影响原始值
def change_list(l):
l[0] = 1
l = ['a','b','c']
print('原始列表:',l)
change_list(l.copy())
#或者 change_list(l[:])
print('操作后列表',l)
输出:
原始列表: ['a', 'b', 'c']
操作后列表 ['a', 'b', 'c']
可以通过向函数传递列表的副本来避免让函数修改原始列表
来源:CSDN
作者:Z_Kai_
链接:https://blog.csdn.net/qq_36536933/article/details/104032455