美文网首页Python编程
Python基础2:语句语法、内存管理

Python基础2:语句语法、内存管理

作者: 水滴记忆 | 来源:发表于2018-09-18 00:03 被阅读0次

    一、语句与语法

    注释

    #注释语句     可注释单行
    """注释语句"""  可注释多行(前后各三个英文双引号)
    '''注释语句'''   可注释多行(前后各三个英文单引号)

    多行一个语句

    Python 语句,一般使用换行分隔,也就是说一行一个语句。过长的语句可以使用反斜杠( \ ) 分解成几行。

    注:在含有小括号、中括号、花括号时可以多行书写。三引号包括下的字符串也可以跨行书写。

    一行多个语句

    分号( ; )允许将多个语句写在同一行上,语句之间用分号隔开。

    注:这会大大降低代码的可读性,Python 虽然允许但不提倡这么做。

    代码组

    缩进相同的一组语句构成一个代码块,我们称之代码组。

    没有缩进的代码块是最高层次的,被称做脚本的“main”部分。

    注:每层缩进一般为四个空格或一个制表符。

    模块

    每一个 Python 脚本文件被当成是一个模块。

    模块可以包含直接运行的代码块、类定义、函数定义或这几者的组合。

    推荐在模块中通过 if __name__ == '__main__': 执行主程序:
    如果模块是被导入, __name__ 的值为模块名字
    如果模块是被直接执行, __name__ 的值为 '__main__'

    if __name__ == '__main__':
        test()
    

    二、内存管理

    变量定义

    在 Python 中,变量在第一次被赋值时自动声明,并根据右侧的操作数来决定变量的类型。

    和其他大多数语言一样,变量只有被创建和赋值后才能被使用。

    引用计数

    对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为 1。

    当同一个对象被赋值给其它变量,或作为参数传递给函数, 方法或类实例时,该对象的引用计数自动加 1。

    当引用离开其作用范围时,对象的引用计数也减 1;被赋值给另外一个对象时,原对象的引用计数也会自动减 1。

    例:
    foo = 'xyz'    # 对象'xyz'被创建并赋值给变量foo,其引用计数被设置为1
    bar = foo     # 对象'xyz'被赋值给变量bar,其引用计数加1
    foo = 123    # foo被赋值给另外一个对象,'xyz'的引用计数减1

    变量的作用域

    定义在函数内部的变量拥有局部作用域,定义在函数外的拥有全局作用域。

    局部变量只能在(其被声明的)函数内部访问,而全局变量可以在整个程序范围内访问。

    调用函数时,该位置可以访问的所有变量名称,都将被加入到所调用函数的作用域中。

    不可变类型

    数字(int、float)、字符串(str)、元组(tuple)

    不能对其指向的对象进行修改!

    python中多个不可变类型变量被赋值为同一对象时,指向同一内存地址。(以对象为核心,每个对象对应一个内存地址)

    若不可变类型变量被重新赋值为其他对象,该变量指向新对象的内存地址。(而不是对原对象进行修改)

    元组

    因为指向的对象不能更改,所以元组(tuple)中的内容不能修改。但是可以将整个元组指向新的对象。

    #创建元组
    a = ('111', '222', '333')     
    #错误:元组中的内容不能修改!
    错误范例:a[0] = 'aaa'     
    #正确:元组可以指向新的对象
    a = ('aaa', 'bbb', 'ccc')           
    

    参数传递

    进行参数传递时,传的只是变量指向的对象,在函数内会创建新的临时变量指向该对象。

    因此在函数内对临时变量进行修改,只是临时变量指向的对象发生了改变,不会影响原变量的值(指向的对象)。

    可变类型

    列表(list)、字典(dict)、集合(set)

    可以对其指向的对象进行修改!(内存地址不发生改变)

    python中多个可变类型变量被赋值为同一对象时,指向不同内存地址。(以变量为核心,每个变量对应一个内存地址)

    浅拷贝:

    直接赋值传递可变类型变量的方式被叫做浅拷贝,复制的变量发生变化,原变量也随着发生变化。
    浅拷贝和原变量指向同一对象,如果对原变量指向的对象进行修改,浅拷贝的对象也同时发生变化。
    (仅限于修改,若指向新的对象,不会影响)

    a=[1,2,3,4,5]
    b=a
    b[2]=0
    print(a)
    
    output: [1, 2, 0, 4, 5]
    

    深拷贝:

    在python中复制一个新列表,操作不影响原列表的方法有:
    list1 = [1,2,3,4]
    使用切片
    切片在python中的作用是非常大的,可用作于所有的可迭代对象。使用:
    list2 = list1[:]
    使用copy
    copy在python中可以实现拷贝一个对象。使用:
    list2 = list1.copy()
    使用循环复制法
    可以循环遍历list1,将值插入到list2中。使用:
    list2 = [for i in list1]

    a=[1,2,3,4,5]
    b=a.copy()
    b[2]=0
    print(a)
    
    output: [1, 2, 3, 4, 5]
    

    参数传递

    进行参数传递时,是将变量真正的传过去。

    因此在函数内对变量进行修改,函数外部的变量也会受到影响。

    相关文章

      网友评论

        本文标题:Python基础2:语句语法、内存管理

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