知识点1:
——Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置对变量进行赋值(出现”=“、”+=”、 ”-=“等赋值语句),除非明确声明为全局(即:global声明),否则将其视为局部变量。
——闭包函数同理!这里也与变量的作用域有关,作用域即这个名字(变量)的可用性的代码范围。每个函数的代码范围内都是一个独立的作用域,如果类似的变量名称(假设变量为:a)在低级的作用域中出现赋值语句,要访问并且修改上一级的作用域中的变量(a)所指向的对象,就必须声明。如果仅仅是访问,那就不必声明。
知识点2:
——变量只是指向具体对象的名称。
——可变对象:可以在其 id() 保持固定的情况下改变其取值。
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
补充知识点1,第二条中的 “要访问并且修改上一级的作用域中的变量(a)所指向的对象,就必须声明。”,加上一个话 “或者将这个变量改成可变对象(如:list等)”。
Sign in to make a reply
_JasonTong
知识点1:
——Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置对变量进行赋值(出现”=“、”+=”、 ”-=“等赋值语句),除非明确声明为全局(即:global声明),否则将其视为局部变量。
——闭包函数同理!这里也与变量的作用域有关,作用域即这个名字(变量)的可用性的代码范围。每个函数的代码范围内都是一个独立的作用域,如果类似的变量名称(假设变量为:a)在低级的作用域中出现赋值语句,要访问并且修改上一级的作用域中的变量(a)所指向的对象,就必须声明。如果仅仅是访问,那就不必声明。
知识点2:
——变量只是指向具体对象的名称。
——可变对象:可以在其
id()
保持固定的情况下改变其取值。——可变对象(list、dict、set等),可以使用某些特定操作来改变它(如:方法append、sort、extend等,以及“+=”、“-=”等),所有指向它的变量都会显示它的改变。比如说:
某些操作(如:y = y + [10],函数sorted(y)等),则是创建一个新对象,不改变其他指向原对象的变量。比如说:
——不可变对象:具有固定值的对象。不可变对象包括数字、字符串和元组。这样的对象不能被改变。如果必须存储一个不同的值,则必须创建新的对象。即:其
id()
必定会改变。——不可变对象(str、int、tuple等),所有指向它的变量都将显示同样的值,但凡会改变这个值的操作将总是返回一个新的对象。比如说: