Python函数作用域及传递变量笔记

╄→гoц情女王★ 提交于 2020-01-19 00:41:09

全局作用域与局部作用域

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']

可以通过向函数传递列表的副本来避免让函数修改原始列表

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!