Python分配函数和内存地址

大家好,最近怎么样了?

我将向你们展示我们如何在Python中将函数分配给变量。我将向您展示如何将函数分配给变量。

现在假设我们有一个名为 hello 的函数,我们要做的就是打印单词 hello。

您知道要调用此函数,您将键入函数的名称,后跟一组括号。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>hello()
</code></span></span>

这将打印单词“hello”,函数名称后面的括号是调用函数的部分。如果您之后要删除那组括号,我们实际上不会调用该函数。

为简单起见,我们将从这些示例中省略主要功能。

函数内存地址?

现在使用 python,python 几乎会将所有东西都视为对象,包括函数。所以我想向你们展示一些东西,如果我要打印我的函数名称,你好,将显示的是这个函数的内存地址。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-declaration-color)">def</span> <span style="color:var(--syntax-name-color)">hello</span><span style="color:var(--syntax-text-color)">():</span>
<span style="color:var(--syntax-text-color)">...</span>     <span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"hello"</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">...</span> 
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">hello</span>
<span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">function</span> <span style="color:var(--syntax-text-color)">hello</span> <span style="color:var(--syntax-text-color)">at</span> <span style="color:var(--syntax-literal-color)">0x7f21d6d4e3a0</span><span style="color:var(--syntax-error-color)">></span>
<span style="color:var(--syntax-error-color)">>>></span> 
</code></span></span>

这是此函数在我的计算机内存中的内存地址,它是十六进制的,就像街道地址一样,例如 123 fake street。这是这个函数在我的计算机内存中的地址,每次我运行这个程序时,这个数字都会改变,你可以在这里看到。

Python分配函数和内存地址

现在我们可以做的一件事是,我们可以将此地址分配给一个变量,假设 hi 等于 hello,并确保您没有在之后添加那组括号,因为这样您将调用 hello 函数并将结果返回给 hi。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">hi</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">hello</span>
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">hi</span>
<span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">function</span> <span style="color:var(--syntax-text-color)">hello</span> <span style="color:var(--syntax-text-color)">at</span> <span style="color:var(--syntax-literal-color)">0x7f21d6d4e3a0</span><span style="color:var(--syntax-error-color)">></span>
<span style="color:var(--syntax-error-color)">>>></span> 
</code></span></span>

所以 hi 等于 hello 没有括号,如果我要很好地打印 hi ,那么 hello 和 hi 的地址将位于相同的内存地址,这两个数字现在都是相同的。

上面的函数使用单个返回,但这也适用于多个返回。所以它会返回两个内存地址。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-declaration-color)">def</span> <span style="color:var(--syntax-name-color)">hello</span><span style="color:var(--syntax-text-color)">():</span>
<span style="color:var(--syntax-text-color)">...</span>    <span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'hello'</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">...</span> 
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-declaration-color)">def</span> <span style="color:var(--syntax-name-color)">time</span><span style="color:var(--syntax-text-color)">():</span>
<span style="color:var(--syntax-text-color)">...</span>    <span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'14:00'</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">...</span> 
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">hi</span><span style="color:var(--syntax-text-color)">,</span><span style="color:var(--syntax-text-color)">t</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">hello</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">time</span>
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">hi</span>
<span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">function</span> <span style="color:var(--syntax-text-color)">hello</span> <span style="color:var(--syntax-text-color)">at</span> <span style="color:var(--syntax-literal-color)">0x7f3db682f3a0</span><span style="color:var(--syntax-error-color)">></span>
<span style="color:var(--syntax-error-color)">>>></span> <span style="color:var(--syntax-text-color)">t</span>
<span style="color:var(--syntax-error-color)"><</span><span style="color:var(--syntax-text-color)">function</span> <span style="color:var(--syntax-text-color)">time</span> <span style="color:var(--syntax-text-color)">at</span> <span style="color:var(--syntax-literal-color)">0x7f3db682f430</span><span style="color:var(--syntax-error-color)">></span>
<span style="color:var(--syntax-error-color)">>>></span> 
</code></span></span>

调用函数

你想象如果在我们将 hello 的内存地址分配给 hi 之后我调用 hi 函数会发生什么,那么我们最终要做的就是调用 hello 函数。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>>>> hi()
hello
>>> 
</code></span></span>

即使我们列出了我们想调用 hi 函数,即使它不存在,所以就好像这个 hello 函数有两个名字,你可以使用 hello 或者你可以使用 hi。那是因为我们将
hello 的内存地址分配给了 hi 的这个变量,所以我们可以把 hi 当作一个函数。

这有点像这个函数有两个名字的别名。如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~

上一篇:Java 和 ABAP 中的几种引用类型的分析和比较


下一篇:快速排序