Discuss / Python / 知识点分享

知识点分享

Topic source

_JasonTong

#1 Created at ... [Delete] [Delete and Lock User]

知识点1:

——Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置对变量进行赋值(出现”=“、”+=”、 ”-=“等赋值语句),除非明确声明为全局(即:global声明),否则将其视为局部变量。

——闭包函数同理!这里也与变量的作用域有关,作用域即这个名字(变量)的可用性的代码范围。每个函数的代码范围内都是一个独立的作用域,如果类似的变量名称(假设变量为:a)在低级的作用域中出现赋值语句,要访问并且修改上一级的作用域中的变量(a)所指向的对象,就必须声明。如果仅仅是访问,那就不必声明。

知识点2:

——变量只是指向具体对象的名称。

——可变对象:可以在其 id() 保持固定的情况下改变其取值。

——可变对象(list、dict、set等),可以使用某些特定操作来改变它(如:方法append、sort、extend等,以及“+=”、“-=”等),所有指向它的变量都会显示它的改变。比如说:

>>> x = []
>>> y = x
>>> y.append(10)
>>> y
[10]
>>> x
[10]

某些操作(如:y = y + [10],函数sorted(y)等),则是创建一个新对象,不改变其他指向原对象的变量。比如说:

>>> x = [1, 2]
>>> y = x
>>> x = x + [10]
>>> y
[1, 2]
>>> x
[1, 2, 10]

——不可变对象:具有固定值的对象。不可变对象包括数字、字符串和元组。这样的对象不能被改变。如果必须存储一个不同的值,则必须创建新的对象。即:其 id() 必定会改变。

——不可变对象(str、int、tuple等),所有指向它的变量都将显示同样的值,但凡会改变这个值的操作将总是返回一个新的对象。比如说:

>>> x = 5  
>>> y = x
>>> x = x + 1  
>>> x
6
>>> y
5

_JasonTong

#2 Created at ... [Delete] [Delete and Lock User]

补充知识点1,第二条中的 “要访问并且修改上一级的作用域中的变量(a)所指向的对象,就必须声明。”,加上一个话 “或者将这个变量改成可变对象(如:list等)”


  • 1

Reply