代码急转弯——什么是变量?


标题有点拗口,实际上是在问变量是什么?

1、什么是赋值?

百度百科中,将赋值定义为:“将某一数值赋给某个变量的过程,称为赋值。”这种定义将变量视作一个内存地址,用该地址指定的一小块存储空间存储数据,可直观想象为一个房间,变量的地址即为房间的门牌号,赋值意味着把数据存入房间。x = 1意味着把1保存到id(x)地址的房间中,y = 1意味着把1保存到id(y)地址的房间中。现在有两个房间,里面各自保存了一个1,所以有两个1。

2、python 的变量是一个标签

python变量却有另一种含义,它把变量赋给某项数据,即变量是一个标签,类似于贴在房间大门上的名字,如花好厅、月圆厅、总统套间等。一个房间只有一个地址,不同房间的地址不能重复,但是一个房间却可以有多个标签,好比说一个人有多个名字。x = 1意味着把x贴在装有1的房间上,y = 1意味着把y也贴到同一个房间上,现在有一项数据1,而变量有两个,果真如此?

x = 1
y = 1
z = 6//3-y
print(id(x))
print(id(y))
print(id(z))

运行结果表明x、y有相同的地址,计算得到的z也有相同的地址。

140727688012176
140727688012176
140727688012176

3、x = y 是何意?

现在明确了,变量有两种:作为地址的变量和作为标签的变量。
对于地址变量,x = y 执行了拷贝操作,将y地址的数据复制到x地址处。
对于标签变量,x = y 执行了贴标签的操作,将y标签粘贴和x标签贴到一起,导致相应的数据上多了一个标签,把它说成引用计数为2。
请写出下列代码的执行结果

x = 1
y = x
y = 2
print(x)

为什么结果为 1?
x = 1   数据 1 上贴标签 x
y = x   数据 1 上再贴标签 y,现在有两个标签
y = 2   把 y 贴到数据 2 上,
print(x)  x 没有挪位置,所以x的值还是 1

4、x += 1 是赋值吗?
print(id(1))
print(id(2))

x = 1
print(id(x))
x += 1
print(id(x))

运行结果表明,x的地址变了,已经由原来贴在1处挪到了2的位置。

140727688012176
140727688012208
140727688012176
140727688012208
5、x += [1] 是赋值吗?

变量有名称、类型和数据三要素。
对于整数、小数等基本类型的数据,称为不可变数据类型,即赋值语句不改变变量的值,而只是让变量引用其他位置的数据。
对于列表、集合等容器类型的数据而言,其元素是可变的,称为可变数据类型,可用赋值语句改变容器中的元素,如下列代码为列表添加了新元素,使得列表变长了,但是标签并没有挪位置。

x = [1]
print(id(x))
x += [2]
print(id(x))
print(x)

运行结果

2404361968264
2404361968264
[1, 2]
6、x[:] = [1] 与 x = [1] 有何不同?
x = []
print(id(x))
x = [1]
print(id(x))
x[:] = [2]
print(id(x))
print(x)

x = [1] 是重贴标签,x[:] = [2] 则是赋值,修改了0号元素(0号元素本身是个标签)。

2404362395464
2404362385480
2404362385480
[2]

结论,python像是C的指针,而不似C的普通变量。x=…也没有拷贝数据(赋值)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FlexSim是一款强大的离散事件模拟软件,主要用于工业流程设计和优化。在FlexSim中创建连续急转弯(通常指的是模拟物料在管道或输送带上的流动,遇到急转弯时的行为)涉及到模型的几何设置、流体动力学模拟以及运动控制。 以下是创建连续急弯的基本步骤和可能涉及到的部分代码: 1. **模型构建**: - 新建或打开项目,选择"Create New Object" -> "System" -> "Pipe",然后在场景中拖拽并连接形成管道。 - 右键点击管道,选择"Edit Properties",在"Profile"部分设置急转弯角度。 2. **流体动力学设置**: - 在"Flow Dynamics"选项卡下,启用"Constitutive Model",选择适合的流体模型,如Newtonian或Laminar。 - 设置适当的流速和压力参数。 3. **运动控制**: - 使用"Motion Control"模块,例如设置"Follow Path"行为,确保物料跟随管道路径。 - 可能会用到的代码片段(假设使用Python脚本语言): ```python from FlexSimSDK import * pipe = simGetObject("Pipe01") # 获取管道对象 motion = pipe.getMotion() # 获取运动控制器 motion.setFollowPath(True) # 启用沿路径跟随 ``` 4. **仿真设置**: - 配置好边界条件和初始条件,比如物料入口和出口。 5. **运行模拟**: - 确保所有设置无误后,开始或运行模拟,观察物料在急转弯处的行为。 相关问题: 1. FlexSim支持哪些流体动力学模型? 2. 如何调整物料在急转弯处的流速和压力? 3. 在FlexSim中如何编写和执行自定义的Python脚本?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值