python全局变量怎么定义python变量的定义和使用方法Python全局变量怎么定义




python全局变量怎么定义python变量的定义和使用方法Python全局变量怎么定义

2022-07-20 21:28:34 网络知识 官方管理员

1.1变量概念

everythinginPythonisanobject.Allthedatatypessuchasnumbers,strings,functions,classesareallobjects.Andanameactsasareferencetogettotheobjects.

Python变量名的创建是通过把类型的实例赋值给它们。变量本身并没有类型,而与它们绑定在一起的对象拥有类型。变量只是一个名称,它也可以被一个完全不同的对象重新赋值。

赋值操作使用=操作符,所以把一个值赋给一个变量就如下所示:

aVariable=aValue

这段代码把值aValue绑定到变量名aVariable上。如果此变量名不存在,解释器会把这个名称添加到合适的命名空间中。命名空间后续讨论。

因此,在Python中区别变量和它指向的对象是非常重要的,对象可以理解为分配的一块内存。

比如定义name="tom"

当变量name被赋值为"tom"之后就可以理解为这个变量名称name指向了“tom"这个对象

当再次定义name="tim"

此时变量名称name就指向了tim这个对象,而不再指向原来的"tom"对象。

python全局变量怎么定义(python变量的定义和使用方法)(1)

1.2变量判断

is用于判断两个变量是否指向同一个对象

==用于判断两个变量指向的对象内容是否相等

1.3变量种类

先简单理解,变量根据作用域不同分为全局变量和局部变量。更多的LEGB后面再讨论。

1.4实例演示

下面我们用一些具体的示例加深对变量的理解。

例1:

a=5deftest():a=2printatest()printa

正常输出:

2

5

[Finishedin0.1s]

总结:函数作用域中变量查找顺序先查找局部变量,有局部变量直接使用局部变量

例2:

name='tom'deftest():printnametest()
  1. 输出:
  2. tom
  3. [Finishedin0.2s]

总结:函数作用域中先查找局部变量,找不到就会查找全局变量,并可以读取全局变量。这里打印name时候查找name变量,先查找局部name没有找到,再查找全局name,找到了然后输出。

例3:

name='tom'deftest():ifname=='li':printnameelse:name='tim'printnametest()

执行报错:UnboundLocalError:localvariable'name'referencedbeforeassignment

总结:

1.所有的变量必须在其使用前明确地赋值,使用未赋值的变量会产生错误。

2.函数作用域中可以引用全局变量,但不能直接修改全局变量的地址指向

例4:

name=['tom']deftest():ifname=='li':printnameelse:name.append('tim')printnametest()

正常输出:

['tom','tim']

[Finishedin0.2s]

总结:虽然函数中不能直接修改全局变量地址指向,但是当全局变量是可变对象时,可以修改全局变量内容。补充说一下python中字符串、元组等是不可变对象,列表是可变对象,具体后面讨论。

例5:

name='tom'deftest():globalnameifname=='li':printnameelse:name='tim'printnametest()

正常输出:

tim

[Finishedin0.2s]

总结:如果函数中的变量是引用的全局变量,正常情况下函数中不能包含对该变量直接重新赋值的代码,如果必须重新赋值那么需要在函数中先通过global引用。

例6:

a=5deftest(a):ifa:a=2printatest(a)printa

结果为:

2

5

[Finishedin0.1s]

总结:在函数参数传递时候相当于是给变量指向的一份拷贝,函数参数即相当于局部变量,所以函数中可以修改变量指向

发表评论:

最近发表
网站分类
标签列表