In [1]: #欢迎来到“只读课堂”!
...: #今天要给大家讲的是“作用域”。
...: """作用域"""
...: #a = 1
Out[1]: '作用域'
In [2]: #def add(y,z):
...: # print y+z+a
...: # return
...: #全局变量名: a add
...: #因为这个a是在这个文件内最外层注册的变量名,所以它是全局变量;它能够在函数内部进行引用,而不需要特定的声明。
...: #全局变量的生命周期在这个程序运行期间
...:
...:
...: #本地变量名: y,z
...: #y海尔z的注册地址在函数内部,y和z是局部变量
...: #局部变量生命周期在函数运行期间。
...:
In [3]: #什么是全局?
In [4]: a = 1
In [5]: b = 2
In [6]: #全局
In [6]:
In [7]: def func():
...: a = 1
...: b = 2
...: #局部
...:
In [8]: #生命周期
In [9]: #代表我们什么时候可以使用它
In [10]: func()
In [11]: #当我们函数执行完的时候,它的生命周期就结束了。
In [12]: def func():
...: c = 3
...:
In [13]: func()
In [14]: print(c)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-14-5315f3e3adca> in <module>()
----> 1 print(c)
NameError: name 'c' is not defined
In [15]: #它的意思就是说,没有定义这个函数,也就是说这个函数已经死掉了。
In [16]: #而a,b就可以全局使用。
In [17]: #——————————————————————————————————————————————————————————————————————
In [18]: a = 1
In [19]: def func():
...: a = 2
...: print(a)
...: func()
...: print(a)
...:
2
1
In [20]: #此时它就会出现后面定义的结果,再显示之前的。
In [21]: #2是局部变量,1是全局变量,它们就是两个完全不同的变量。
In [22]: def func():
...: global a
...: a = 2
...: print(a)
...: func()
...: print(a)
...:
2
2
In [23]: #用 global 就可以把两个都修改了。
In [24]: #——————————————————————————————————————————————————————————————————————
In [25]: mylist = [1,2,3]
...: def func(var):
...: var[0] = 'a'
...: print(var)
...: func(mylist)
...:
['a', 2, 3]
In [26]: print(mylist)
['a', 2, 3]
In [27]: #传变量的时候,用这种赋值方式是会改成一样的,它们是同步的。
In [28]: #这个方式叫“函引用”。
In [29]: #为了解决这个问题,我们用以下代码:
In [30]: mylist = [1,2,3]
In [31]: def func():
...: #var = mylist
...: var = var[:]
...: var1[0] = 'a'
...: print(var1)
...: func(mylist)
...: print(mylist)
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-31-11ee2baf84f1> in <module>()
4 var1[0] = 'a'
5 print(var1)
----> 6 func(mylist)
7 print(mylist)
8
TypeError: func() takes 0 positional arguments but 1 was given
In [32]: #哦,我们在这里没有清除之前的定义,那么我们换一个变量名。
In [33]: yourlist = [1,2,3]
In [34]: def func(var2):
...: var3 = var2[:]
...: var3[0] = 'a'
...: print(var3)
...: func(yourlist)
...:
['a', 2, 3]
In [35]: print(yourlist)
[1, 2, 3]
In [36]: #这样就避免了冲突,是不是一个非常好的方法呢?
In [37]: #——————————————————————————————————————————————————————————————————————
In [38]: print("\n本次“只读课堂”的python教程就到这了,欢迎继续收看!\n")
本次“只读课堂”的python教程就到这了,欢迎继续收看!