【发布时间】:2015-01-13 17:38:30
【问题描述】:
在我开始之前,我只是不想澄清一下我知道变量显然使编程更容易;这只是一个关于 foo() 如何分配给 var_bar 的性质的问题,而不是为什么。
例如,假设我有一个想要阅读的文件,我会执行以下操作:
>>> r=open('Foobar.py')
>>> r.readline()
'Foo'
>>> r.readline()
'bar'
>>> r.readline()
'\n'
我以前做过的,没用的,是这样的:
>>> open('Foobar.py').readline()
'Foo'
>>> open('Foobar.py').readline()
'Foo'
当时我只是用alt+p调出上一行,顺便用的是IDLE。
无论如何,同样,如果我在 itertools 模块中使用 count(),我必须将函数 count 分配给这样的变量:
c = itertools.count(10,1)
>>> for i in range(0,50):
next(c)
10
12
14
...
如果我只是做了以下事情:
for i in range(0,50):
next(itertools.count(10,1))
10
10
10
10
...
那么为什么,当我(看似)使用完全相同的代码时,会根据代码的表达方式产生不同的输出(当然,它与幕后发生的事情不同) .
我知道如果 list1=list2,并且 list2 被修改,那么 list1 也被修改为它们的别名,因为第二个不仅指第一个,而且是第一个(list2 是 list1 返回 True),所以当变量 c 和 l 引用的表达式单独使用时,我会期望相同的行为。
感谢您的帮助,我们将不胜感激,因为您知道,这对于像我这样的初学者来说是一个巨大的障碍,所以一些关于这方面的阅读材料,无论是什么,都会得到很好的利用。
【问题讨论】:
-
r = open('Foobar.py')不会将函数分配给变量 - 它调用函数并将该函数的返回值分配给变量。对open的每次调用都会为您提供一个新的文件对象(它们引用磁盘上的同一个文件并不重要)。如果在r = open('Foobar.py')之后,您将r分配给另一个变量:a = r,那么a将引用同一个文件对象,类似于您的list1 = list2代码。
标签: python function variables python-3.x variable-assignment