在python中非法的赋值语句_Python 笔试集(1):关于 Python 链式赋值的坑

本文探讨了Python中的链式赋值语句,指出其在某些情况下可能引发误解。通过一个面试题解析了Python与C语言在赋值顺序上的差异,强调Python的赋值是从左到右进行,并且是基于对象语义的,导致与值语义语言如C不同的行为。理解这一特性对于避免Python编程中的常见错误至关重要。
摘要由CSDN通过智能技术生成

前言

Python 的链式赋值是一种简易型批量赋值语句,一行代码即可为多个变量同时进行赋值。

例如:

x=y = z = 1

链式赋值是一种非常优雅的赋值方式,简单、高效且实用。但同时它也是一个危险的糖衣炸弹,值得我们引起关注。

面试题:求链式赋值语句中变量 x 的值?

x = [1, 2, 3, 4, 5]

i = 0

i = x[i] = 3

如果你有过 C 语言的编程经验,那么你的思维习惯可能会让你得出这样的结果:x[0] 被赋值为 3,然后 i 再被赋值为 3,所以变量 x 的值为 [3, 2, 3, 4, 5]。

但实际上正确的答案却是:变量 i 首先被赋值为 3,然后 x[3] 再被赋值为3,所以最终变量 x 的值为 [1, 2, 3, 3, 5]。

从上述结果的表现可以看出二者的区别为:C 语言的赋值顺序是自右往左* 依次进行的,而 Python 则相反。*

造成这种表征区别的本质原因是由于 C 语言是一种「值语义」类型语言,而 Python 是「对象语义」类型语言。

值语义类型编程语言

值语义指使用系统标准的拷贝方式将一个源对象拷贝成为目标对象后,源对象与目标对象之间毫无关系,彼此独立存在,改变互不影响。

从这一特性出发, C 语言的赋值语句被设计成了具有返回值的表达式,如此才能够保证在链式赋值中所有的对象最终都是彼此独立的。

例如:

x=(y = 1)

表达式 y = 1 在将数值

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值