Python¶
约 625 个字 预计阅读时间 2 分钟
Acknowledgement¶
Environment & Frame¶
Frame
each name is bound to a value
within a frame, a name can't be repeated
An environment is a sequence of frames and also includes its parent
- 可变对象 (mutable) 和不可变对象 (immutable) 是 Python 语⾔的核⼼概念
- 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制⼀份后再改变,这会开辟⼀个新的地址,变量再指向这个新的地址
- 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引⽤)改变后,实际上是其所指的值直接发⽣改变,并没有发⽣复制⾏为,也没有开辟新的出地址
- 不可变数据类型创建不可变对象,可变数据类型创建可变对象
数据类型 | 可变性 | 举例 |
---|---|---|
整数 | 不可变 | 5 |
浮点数 | 不可变 | 6.2 |
复数 | 不可变 | 2+3.2j |
字符串 | 不可变 | 'Hello' |
逻辑量 | 不可变 | True |
列表 | 可变 | [1,2,'a'] |
元组 | 不可变 | (1, 2, 'a') |
集合 | 可变 | {1,2,3} |
字典 | 可变 | {1:”jan”,2:”feb”,3:”mar”} |
- 不同数据类型对象和逻辑值的变换
数据类型 | True | False |
---|---|---|
整数 | ⾮ 0,如 1 | 0 |
浮点数 | ⾮ 0,如 1.0 | 0.0 |
复数 | ⾮ 0,如 1j | 0+0j |
字符串 | ⾮空字符串,"hello" | "" |
逻辑量 | True | False |
列表 | ⾮空列表 | [] |
元组 | ⾮空元组 | () |
集合 | ⾮空集合 | set() |
字典 | ⾮空字典 | {} |
局部变量 vs 全局变量 ¶
- Python 无需定义变量,第一次对一个变量的赋值就产生了这个变量
- 在函数内
- 对一个变量的赋值,如果之前没有 global 声明,就产生了一个局部变量
- 取一个变量的值,如果之前没有产生过,就去使用全局变量(默认)
- 这之后再赋值就出错
- 规则:如果要在函数中使用全局变量,就在函数一开始使用 global 声明
作用域 ¶
namespace
命名空间
scope
作用域
life cycle
生存周期
- 命名空间里保存了从标识符到对象的映射
- 当在 Python 中执⾏⼀个代码块时,它拥有三个命名空间:局部、全局和内置
global 关键字
- 如希望在函数中使⽤全局变量,需要⽤ global 关键字声明
- 在函数内,一个变量一经赋值就创建了一个局部变量
- 这之后再试图用
global
来访问同名的全局变量是错误的