(Python如何定义变量)(python绑定变量)

(Python如何定义变量)(python绑定变量)

前言

定义变量还需要讲解?

你能说出来,以下代码定义了多少个变量吗:

(Python如何定义变量)(python绑定变量)

如果你的答案是2个,那么希望看完本文后你会有不一样的回答。

再看一些类似教条式的规范:

  1. 为什么不要用 list 、range 等等这些作为变量名字?
  2. 为什么自定义函数中的默认值参数,不要用 列表 等可变类型?

本文的内容能帮助你理解这些知识点。

本文不是讲解如何定义变量,也不打算按照市面上的教程逻辑讲解,希望我能让你对变量带来一些新的理解。

为什么变量这么重要

如下代码生成了一个列表:

(Python如何定义变量)(python绑定变量)
  • 执行过程中,这里面到底发生了什么事情?

很多人知道,这是生成了一个列表。

Python 在背后做了许多事情,姑且想象他有一个"对象区",保存了这个列表:

(Python如何定义变量)(python绑定变量)
  • 你可以把对象看作是多个数据的组合(数据结构)
  • 一个列表就是一个对象
  • 不仅仅是列表,诸如 int、str 这些基本的数据,都会存活在这个 "对象区" 中
  • 每个对象有一个唯一的数字 id 编号(就看作是身份证号码吧)

如果把对象看作是生活上的人类,把对象的 id 看作是身份证号码。那么当你需要使唤某个人做事情,你就必须通过身份证号码才能与他沟通

变量,就是让你能与 "对象区" 的对象沟通的工具。也就是说,变量本质上保存的不是数据对象本身,而是保存了对象的"身份证号码"。

如下代码:

(Python如何定义变量)(python绑定变量)
  • 行2:通常会说,s2 赋值给 s1。但是赋的是什么样的值?那是对象的 id 值
  • 行4:所以,此时通过 s2 对 列表操作,做事情的是"对象区" 上的列表对象。如下:
(Python如何定义变量)(python绑定变量)
  • 注意图上的箭头,这就是为什么有些教程会说"变量指向 xxx 对象"

这些都很好理解,而自定义函数,其实与上面生成列表"赋值"给变量是一样的过程!

函数也是对象

Python 号称"一切皆对象",这不是随便说说。

如下自定义函数:

(Python如何定义变量)(python绑定变量)

执行到 def 这行代码时,Python 会在 "对象区" 生成函数对象:

(Python如何定义变量)(python绑定变量)
  • 函数中的代码并没有执行,但这些代码的逻辑作为数据被保存在函数对象中
  • 函数名字实际是一个变量,指向了函数对象

这让自定义函数与普通的列表没有多大区别。

的确如此。

既然函数本身也是对象,自然可以有多个变量同时指向它:

(Python如何定义变量)(python绑定变量)
  • 现在2个变量都能调用同一个函数

用2个变量指向同一个函数,好像没有多大用处。实际上,这能让我们随意把某个函数传递到其他函数中。

函数表达是一系列操作逻辑,这意味着我们可以把固定的逻辑写好,需要的时候就能调用。

比如,在 pandas 中到处可见这种情况:

(Python如何定义变量)(python绑定变量)
  • 任何的现代编程语言,基本都具备这种把函数到处传递的机制

刚刚说到,自定义函数里面的代码作为数据被保存在函数对象中。

(python遍历的几种方式)(python 遍历的方式)

(ncl和Python互相调用)(ncl和python)

那么,函数对象里面还能保存什么数据吗?

函数对象中保存的数据,基本是函数的一些相关属性,比如每个参数的名字等。

其中,如果是默认参数,里面还会保留其默认值(实际上保存的只是默认值对象的 id)

如下自定义函数:

(Python如何定义变量)(python绑定变量)
  • 在一次完整的代码运行期间(就是上述整个代码从上到下执行一次),由于函数对象只创建了一次,他的默认参数的 data 一直是同一个列表对象
(Python如何定义变量)(python绑定变量)
  • 行5:此行被执行,进入到函数对象逻辑(行2)时,参数 data 的默认列表对象被加入了值1
(Python如何定义变量)(python绑定变量)
  • 行6 :由于调用时,传给 data 参数的时一个新的列表对象([1,2,3,4]) ,因此进入行2时,data.append 是针对行6生成的列表对象
(Python如何定义变量)(python绑定变量)
  • 行7:与行5同理,行2是对参数 data的默认列表对象操作
(Python如何定义变量)(python绑定变量)

导入包也是在定义变量

平时导入 pandas 或 numpy 等库,习惯写出如下导入包的代码:

(Python如何定义变量)(python绑定变量)
  • 其中的 as xxx ,就是定义了变量,指向了对应的模块对象

那么,如果只是写 import ,没有用 as ,难道就没有定义变量?

这是不可能的。没有变量,我们后续就不可能使用该包的功能。

默认情况下(没有使用 as) ,变量名字就是包或模块完整名字。导入后其实我们可以随意使用新的变量:

(Python如何定义变量)(python绑定变量)

答疑

以下代码定义了多少个变量?

(Python如何定义变量)(python绑定变量)
  • 5个变量。分别是 pd、numpy、load_data、a、b

以下代码会报错吗?

(Python如何定义变量)(python绑定变量)
  • 会。
  • 本来行2希望调用的是 Python 内置函数 list,但是却在行1中改变了变量 list 的指向

有没有什么骚操作能临时占用变量?

(Python如何定义变量)(python绑定变量)

最后给一个题目,你认为以下代码输出是什么,为什么?

(Python如何定义变量)(python绑定变量)

创作不易,记得点赞关注噢

声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(Python如何定义变量)(python绑定变量)
本文链接:https://www.51qsb.cn/article/4945.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2022-09-14
下一篇2022-09-14

你可能还想知道

发表回复

登录后才能评论