有人可以解释为什么整数示例导致x和y的值不同,而列表示例导致x和y是同一对象的原因吗?
x = 42
y = x
x = x + 1
print x # 43
print y # 42
x = [ 1, 2, 3 ]
y = x
x[0] = 4
print x # [4, 2, 3]
print y # [4, 2, 3]
x is y # True
因为整数是不可变的,而list是可变的。您可以从语法中看到。在x = x + 1
你实际上是分配一个新值x
(管它是在LHS)。在中x[0] = 4
,您要在列表上调用index运算符并为其指定一个参数-它实际上等效于x.__setitem__(0, 4)
,这显然会更改原始对象,而不创建新对象。
这份参考手册讲述该语言的语法和“核心语义”。它虽然简洁,但是力求准确和全面。不是语言必要部分的内建对象类型、内建函数和模块的语义在Python标准库中讲述。关于语言的非正式的介绍,请参阅Python教程。对于C和C++程序员,还存在另外两个手册:扩展和嵌入Python解释器讲述关于如何编写Python扩展模块的高级话题,Python/C API参考手册详细地讲解对C/C++程序员可用的接口。
我们知道,在调用函数时如果不指定某个参数, Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。 Python 定义带有默认值参数的函数,其语法格式如下: def 函数名(...,形参名,形参名=默认值): 代码块
位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。 实参和形参数量必须一致 在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行),否则 Python 解释器会抛出 TypeError 异常,并提示缺少必要的位置参数。 例如: 运行结果为: Traceback (most rece
问题内容: 为什么多重赋值为int而不是列表或其他对象提供不同的引用? 问题答案: 在int示例中,您首先将和分配了相同的对象,然后使用另一个对象(的结果)重新分配。现在指的是另一个对象。 在列表示例中,您为和分配了相同的对象,但是您并没有做任何更改。仅更改列表对象的内部状态,而不更改其标识。因此,它们保持不变。 如果替换为,则最终会得到不同的对象,因为再次需要为分配一个新对象(的结果)。 请注意
1 Python 异常处理参考 本节简单罗列 Python 语言中与异常处理有关的常用语句形式及用法。 发生错误时通常由系统自动抛出异常,但也可由程序自己抛出并捕获。 捕获并处理异常:try-except 发生错误时,如果应用程序没有预定义的处理代码,则由 Python 的缺省异常处理机制 来处理,处理动作是中止应用程序并显示错误信息。如果程序自己处理异常,可编写 try-except 语句来定义
目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。而本节将介绍的关键字参数,则可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便。 关键字参数 是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。 因此,Python 函数的参数名应该具有更好的语义,这样程序可以立刻明