python学习交流

python变量跟C中变量的区别

2018-03-28  本文已影响260人  十曰立

英文元档

其他语言的变量有"variables"

比如c语言中,定义一个变量,就是把值放到变量盒子里面去:

int a = 1 int a = 2 int b = a

如上图所示,赋值b=a,就是新建一个盒子,然后把值赋值一份放过去,特点是:两个值之间完全独立。

python的则是 "names"

python的变量就是贴标签!(python里面不是什么都是对象么,我们的变量名就是一个标签而已,类属性啥的都在变量自己内部保存着呢!)

a = 1 a = 2 b = a

上面的a=2之后,1就没有归属了,就无法调用了,python的基于引用的内存管理器很快就会把这个对象的内存给清理掉的。

理解举例:默认的参数值

这是一个很容易出错的情景:

def bad_append(new_item, a_list=[]):
    a_list.append(new_item)
    return a_list

上面的a_list在函数定义的时候就赋值为空数组了,因此每次你调用函数的时候,你得到同样的默认值

>>> print bad_append('one')
['one']

>>> print bad_append('two')
['one', 'two']

第一次进去的时候就是一个空的数组,然后你添加一个“one”,第二次进去的时候,a_list已经有一个元素了(因为这个是在函数定义的时候就初始化的哟,不是每次调用函数的时候才临时初始化的哈!)

由于list是可变对象,因此你是可以随时变量内容的。

正确的操作方法是(得到一个默认的list or dictionary or set):在每次运行的时候才创建这个可变对象,也就是说在函数里面创建对象。

def good_append(new_item, a_list=None):
    if a_list is None:
        a_list = []
    a_list.append(new_item)
    return a_list

每次均初始化一个空的list,然后a_list指向它,这样的话就不会每次都往a_list累计填值了。

上一篇下一篇

猜你喜欢

热点阅读