原副标题:要量Python表达式与表达式
零此基础python入门教程:python666.cn
我们好,热烈欢迎走进 Crossin的程式设计课室 !
Python是两门独有的词汇,与C词汇有非常大差别,算数Python很多萌新则表示对表达式与表达式不认知,段小宇C的都晓得,给表达式表达式时,须要先选定正则表达式,与此同时会开拓几块缓存地区,用作储存值,比如:
inta = 1;
a 是缓存空间中的一小片地区,就像两个大卧室里头的两个小盒子,表达式是把有理数1运载到箱子里头。
那时给表达式a再次表达式
a = 2;
箱子仍然是这个箱子,也是说缓存地址没变,而已此段缓存中的值变了,变为了2。
再上看:
intb = a;
当把表达式a表达式给除此之外两个表达式b时,相等于把值复本了这份传达给表达式b,b是新开拓的几段缓存地区
而在Python中,“表达式”的严格叫法是“名字(name)”,也可以认知为标签,就像我们人的姓名一样,名字是挂在人身上的两个标签。
>>>10-a
Traceback (most recent call last):
File “<stdin>”, line 1, in<module>
NameError: name aisnotdefined
比如上面这段错误报的是name ‘a’ 没定义,而没说成 variable。
在Python中,给表达式表达式是相等于给对象贴标签,就像我们给人取名字一样,表达式本身是没任何意义的,它没类型信息,真正的信息都在对象身上。
比如:
a = 1
Python内部首先会分配几段缓存空间用作创建有理数对象1,然后给这个1贴上名为a的标签。
然后执行
a= 2
Python接着会在另几块缓存地区创建有理数对象2,然后把标签a从1身上撕下来贴在2身上,此时,我们没法再通过a来得到1这个值了。
那时把名字a表达式给除此之外两个名字b
b = a
相等于在刚才的2身上又贴了两个新的标签b,注意,这里和C词汇是完全不一样的,定义b的时候不须要分配缓存空间,这样我们既可以通过a来访问2也可以通过b来访问2,访问的都是同两个对象,就好比我们给宝宝取名时既有小名也有大名,其实叫的都是同两个人。
虽然我们通常在Python中还是用”表达式”的叫法(因为在程式设计词汇中这是一种通用叫法),但是我们须要认知Python中的表达式不同于其他词汇,表达式而已两个名字。
认知了Python中的表达式与表达式后,再上看函数的参数传达,如下所示:
>>> deffun_a(a):
…a = a+ 4
…
>>> g = 0
>>> fun_a(g)
>>> g
0
全局表达式g传达给函数fun_a时,相等于函数中的参数a也将作为标签贴在0上,随后a被再次表达式了(a=a+4),相等于从0撕下标签a贴到4身上,然后g仍然还是0上面的标签。
再上看这个函数,传达的是两个列表对象
>>> deffun_b(names):
… names[ 0] = [ x, y]
…
>>> n_list = [ a, b, c]
>>>fun_b(n_list)
>>>
>>> n_list
[[ x, y], b, c]
与前面的步骤还是一样的,names 和 n_list 都是[‘a’,’b’,’c’]上的两个标签,而已列表中的第0个元素被再次表达式了,但是names和 n_list 仍然都贴在这个列表对象身上,虽然 n_list的值更新了,但对象仍然是原来这个对象。就好比张三和小张都是同两个人,那时给小张换件衣服时,其实是给张三换件衣服,人还是这个人,而已他身上的东西发生了变化。
作者: 刘志军
感谢转发和点赞的各位~
__
我们一直谈论“写代码”,但你会“读代码”吗?
如需了解 付费精品课程及 教学 答疑服务
请在 Crossin的程式设计课室666