Python变量如何使用

  

Python变量如何使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Python编程中经常遇到一些莫名其妙的错误,其实这不是语言本身的问题,而是我们忽略了语言本身的一些特性导致的,今天就来看下使用Python变量时导致的3个不可思议的错误,以后在编程中要多多注意。

<强> 1,可变数据类型作为函数定义中的默认参数

这似乎是对的吗?你写了一个小函数,比如,搜索当前页面上的链接,并可选将其附加到另一个提供的列表中。

def  search_for_links(页面,add_to=[]):   ,,,new_links =, page.search_for_links ()   ,,,add_to.extend (new_links)   ,,,return  add_to

从表面看,这像是十分正常的Python代码,事实上它也是,而且是可以运行的。但是,这里有个问题。如果我们给add_to参数提供了一个列的表,它将按照我们预期的那样工作。但是,如果我们让它使用默认值,就会出现一些神奇的事情。

试试下面的代码:

def  fn (var1, var2=[]):   ,,,var2.append (var1)   ,,,印刷(var2)   fn (3)   fn (4)   fn (5)

可能你认为我们将看到:

[3]   [4]   [5]

但实际上,我们看到的却是:

[3]   (3、4)   (3、4、5)

为什么呢?如你所见,每次都使用的是同一个列表,输出为什么会是这样?在Python中,当我们编写这样的函数时,这个列表被实例化为函数定义的一部分。当函数运行时,它并不是每次都被实例化。这意味着,这个函数会一直使用完全一样的列表对象,除非我们提供一个新的对象:

fn (3 [4])   (4 3)

答案正如我们所想的那样。要想得到这种结果,正确的方法是:

def  fn (var1, var2=None):   ,,,ifnot  var2:   ,,,,,,,var2 =[]   ,,,var2.append (var1)

<强> 2,可变数据类型作为类变量

这和上面提到的最后一个错误很相像。思考以下代码:

class  URLCatcher(对象):   ,,,urls =[]   ,,,def  add_url(自我,url):   ,,,,,,,self.urls.append (url)

这段代码看起来非常正常。我们有一个储存url的对象。当我们调用add_url方法时,它会添加一个给定的url到存储中。看起来非常正确吧?让我们看看实际是怎样的:

a =URLCatcher ()   a.add_url (& # 39; http://www.google.com& # 39;)   b =URLCatcher ()   b.add_url (& # 39; http://www.pythontab.com& # 39;)   打印(b.urls)   打印(a.urls)

结果

[& # 39;http://www.google.com& # 39; & # 39; http://www.pythontab.com& # 39;】   [& # 39;http://www.google.com& # 39; & # 39; http://www.pythontab.com& # 39;]

等等,怎么回事? !我们想的不是这样啊。我们实例化了两个单独的对象a和b。把一个URL给了一个,另一个给了b。这两个对象怎么会都有这两个网址呢?

这和第一个错例是同样的问题。创建类定义时,URL列表将被实例化。该类所有的实例使用相同的列表。在有些时候这种情况是有用的,但大多数时候你并不想这样做。你希望每个对象有一个单独的储存为。此,我们修改代码为:

class  URLCatcher(对象):   ,,,def  __init__(自我):   ,,,,,,,self.urls =[]   ,,,def  add_url(自我,url):   ,,,,,,,self.urls.append (url)

现在,当创建对象时,url列表被实例化。当我们实例化两个单独的对象时,它们将分别使用两个单独的列表。

<强> 3,可变的分配错误

这个问题困扰了我一段时间。让我们做出一些改变,并使用另一种可变数据类型——字典。

a ={& # 39; 1 & # 39;:“人,& # 39;2 & # 39;:& # 39;两个# 39;}

现在,假设我们想把这个字典用在别的地方,且保持它的初始数据完整。

b =,   b [& # 39; 3 & # 39;]=& # 39; 3 # 39;

现在,让我们看看原来那个我们不想改变的字典:

{& # 39;1 & # 39;:“人,& # 39;2 & # 39;:& # 39;两个# 39;,& # 39;3 & # 39;:& # 39;3 # 39;}

哇等一下,我们再看看b ?

{& # 39;1 & # 39;:“人,& # 39;2 & # 39;:& # 39;两个# 39;,& # 39;3 & # 39;:& # 39;3 # 39;}

Python变量如何使用