美文网首页python学习交流
python变量跟C中变量的区别

python变量跟C中变量的区别

作者: 十曰立 | 来源:发表于2018-03-28 13:41 被阅读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累计填值了。

    相关文章

      网友评论

        本文标题:python变量跟C中变量的区别

        本文链接:https://www.haomeiwen.com/subject/jybycftx.html