文章目录

  • 1. 对象
  • 2. 变量
  • 2.1 变量的概念
  • 2.2 使用原则
  • 2.3 名称错误
  • 2.4 三大特征
  • 2.5 删除变量
  • 3. 常量
  • 4. 标识符
  • 4.1 命名规范
  • 4.2 保留字关键字
  • 4.3 命名冲突
  • 4.4 命名风格
  • 5. 练习


python 对象池机制 python对象的概念_Python

1. 对象

对象: 是存储在内存中的一个实体.
Python 中的所有数据都是对象, 包括: 数字, 字符串, 列表, 元组, 集合, 字典, 函数, 类等...
* 通常当提到 '值' , '数据', '对象' 的时候, 指的都是同一个概念.

python 对象池机制 python对象的概念_下划线_02

2. 变量

2.1 变量的概念

变量: 在计算机中是存储值的抽象概念, 即存储会变化的值.

程序执行的本质就是一系列状态的变化, 变是程序执行的直接体现, 需要有一种机制能够将其够记录下来.
变量可以让计算机拥有记录事物状态的能力.

2.2 使用原则

变量的基本使用原则是 '先定义, 后引用' , 没有定义直接使用会抛出名称错误.
    定义: 将值赋予变量的过程, 需要使用赋值语法.
    引用: 访问值的方式, 通过变量访问对象.
赋值语法: num = 1
     num  变量名, 对象的标签, 通过标签访问对象.
     =    赋值符号, 让变量指向对象, Python 中'=='是等号.
     1    变量值, 是一个对象.
     
赋值语法执行过程:
* 1. 创建对象: 在内存中创建了一个对象 1 .
* 2. 绑定对象: 在内存中创建了一个名为 num 的变量, 并让它指向对象.

python 对象池机制 python对象的概念_Python_03

Python 中变量并不是直接存储对象, 而是存储'对象的内存地址', 也就是指针.
'对象'保存在内存的'堆区', '变量'保存在内存的'栈区'.
将变量写在 print() 的括号中, 将对象打印到屏幕.
# 1. 定义变量
num = 1

# 2. 引用对象
print(num)  # 1

2.3 名称错误

变量没有定义直接使用会抛出名称错误.
print(num)
Pycharm 会检测代码的语法, 当检测代码错在语法错误时会给出提示. 
程序在执行的时候是会变化的, 这个提示仅供参考, 并非百分百准确.

python 对象池机制 python对象的概念_下划线_04

代码运行之后, 解释器会对代码进行语法检测, 能被检测出问题的都是'语法错误', 
经过语法检测的代码才会被真正的翻译执行, 执行中报错则是'逻辑错误'.

python 对象池机制 python对象的概念_代码块_05

英 NameError: name 'xxx' is not defined.
中 名称错误:未定义名称“xxx”.

2.4 三大特征

对象具有3个基本特征:
* 1. 本征值(identity), 对象在内存中的唯一编号,也称为'身份标识',
     对 CPython 解释器而言是内存地址, id值是由16进制内存地址转10进制的结果.
* 2. 类型 (type), 对象的数据类型.
* 3. 值 (value), 对象本身.
* 变量本身没有数据类型的, 通常会听到'变量类型', 指的使变量所引用的对象的类型.
内置 id()    函数: 返回对象的id值.
内置 type()  函数: 返回对象的数据类型.
内置 print() 函数: 打印对象.


# 定义变量
num = 1

# 打印对象
print(num)  # 1

# 打印对象的id
print(id(num))  # 1660765563184

# 打印对象的内存地址 10进制转16进制
print(hex(id(num)))  # 0x1fedd396930

# 打印对象的数据类型
print(type(num))  # <class 'int'>

2.5 删除变量

del 关键字断开变量与指针的绑定关系.
断开引用关系之后, 没有绑定指针的变量, 不能在使用, 
否则会报错: NameError: name 'xx' is not defined.
# 定义变量
num = 1

# 引用变量
print(num)

# 删除变量与指针的绑定关系
del num

# 报错: NameError: name 'num' is not defined
print(num)

3. 常量

常量是计算机中存储值的抽象概念, 即存储不能改变的值.
Python 中没有真正意义上的常量, Python 开发者们墨守成规的将全大写的变量名看成是常量.
将程序中全局不会改变的值绑定给'常量'.
# 定义'常量' 变量名全大写.
IP = "127.0.0.1"

# 引用'常量'
print(IP)  # 127.0.0.1

4. 标识符

Python 中变量, 常量, 函数, 类等对象起的名字就是'标识符'.

4.1 命名规范

命名原则:
* 1. 只能由数字, 字母, 下划线组成.
* 2. 不能以数字开头.
* 3. 不能与 Python 关键字冲突, 可以通过 Ketword 模块查看保留字关键字.

注意点: 
1. 命名做到"见名知意", 不管名称多长.
2. 新版本解释器支持变量名为汉字, 不建议去使用.
3. 名称严格区分大小写, 例如: Num 与 num 是两个不同的变量.
4. Python 中下滑线开头的变量有特殊的用法.
   单独使用下划线 '_' 可以表示一个临时值.
   单下划线开头 _xx  代表禁止外部访问的类成员, 需通过类提供的接口进行访问.
   双下划线开头 __xx 代表类的私有成员.
   双下划线开头和结尾 __xx__ 是 Python 特殊方法专用的标识.

4.2 保留字关键字

# 导入 keyword 模块
import keyword

# 打印 Python 关键字
print(keyword.kwlist)
运行工具窗口显示:
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await',  'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for',  'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',  'raise', 'return', 'try', 'while', 'with', 'yield']
Python 为保留字关键字 定义了功能, 如果自己定义标识符名称重复后, 标识符的内置的功能就会被覆盖.

4.3 命名冲突

print 是 Python 内置的输出函数, 是具备输出能力的,
使用 print 作为变量名后, print 就只是一个变量, 不具备了输出能力.
print = 1
print('Hello')

python 对象池机制 python对象的概念_代码块_06

对象加括号就是调用的意思, 内置函数或方法是可以叫括号调用, 调用的意思后续会说.
int 对象不可以加括号调用, 否则会抛出报错:
英 TypeError: 'int' object is not callable
中 类型错误 : 'int' 对象不可调用

python 对象池机制 python对象的概念_python_07

4.4 命名风格

* 1. 驼峰体 
	大驼峰: 所有单词首字母大写.                    例如: AddUser  (Javascript 语言推荐)
	小驼峰: 第一个字母小写, 其他单词首字母大写.     例如: Adduser
	
* 2. 下划线: 单词之间用下划线隔开.                  例如: add_user (Python 推荐)

5. 练习

1. 什么是对象? 什么是变量? 为何要有变量? 对象与变量的关系?
2. 赋值语言三大组成部分是? 每部分的作用是什么? 
3. 标识符的命名原则与风格.
4. 对象三个特征是什么?

文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言10是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言11是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言12是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言13是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言14是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言15是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言16是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言17是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言18是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言19是为了避免文章提示质量低.