Python编程

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

2018-09-18  本文已影响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]

参数传递

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

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

上一篇下一篇

猜你喜欢

热点阅读