[oeasy]python0135_变量名与下划线_dunder_声明与赋值
变量定义
回忆上次内容
变量 就是 能变的量
上次研究了 变量标识符的 规则
大小写字母
数字
下划线
第一个字符 应该是 字母或下划线
合法的标识符可以包括
还研究了字符串(str)的函数
是否为合法标识符
isidentifier
查询字符串
最后发现
这个isidentifier函数有时候不好使?

这怎么理解呢??🤔
翻看文档
and 属于关键字

如何判断一个字符串是否是关键字呢?

判断是否为关键字

关键字 是不能作为标识符的
dir()查询模块的时候
经常会看到下划线

这些下划线如何理解?
下划线
from module import * 时
不被其他模块引用
以下划线开头的变量

所以 _a 可以作为模块内部的变量或者函数
内部变量
除非明确点名

指清名字 _pi
是可以导入的
不点名不能用吗?
不点名

from random import *
无法导入_e

上次的值
在游乐场里
_下划线 意味着上次的值

后面的下划线
在后面加上下划线
一般是为了区分已经有的标识符

使用max
会把max函数 屏蔽掉
使用max_
不会屏蔽 max函数
两端双下划线(dunder)

系统定义的标识符
模块名
函数名
变量名

dunder变量都是有用意的
不要轻易破坏
前有双下划线
类里面的私有名
无法直接存取
目的是
避免 和 父类或子类的私有变量 重名

我们再来看看 o 这个变量标识符
细节
o
两边并不加引号如果加了双引号 就是字符串了
因为 这里的
o
是 变量标识符而不是 字符串

在等号两端 都保留 有一个空格
可是 为什么要 加空格呢?
可读性
增加文档的可读性
这
不会
影响程序的执行速度

这两句话从何说起
加空格的原因
这两句话来自于python之禅

现在到底有多少变量呢?
locals()
查询本地变量
有一个内置的函数叫做 locals

可以查询关于 locals 的帮助

返回的是一个包含当前域中所有变量的字典
声明和赋值都使用等号
声明并赋值 变量o 之后
变量o 真的在内存里有位置了么?
我们来看看
具体位置

id函数是什么意思?
help(id)
id返回 对象o的标识符
但是如果 我们给变量新赋 一个值
o 确实在内存中 有了位置
那么 存储变量的位置
还是那个 内存地址 么?
实践
虽然 a这个变量名 没有变
但是 id(a)变了
也就是说
在内存中的位置 变了
a这个容器的 内存位置没变
但是a所指向的 变量位置
两次赋值 都是STORE到a这个NAME里面
有什么区别吗?
第二次赋值 和 第一次赋值
区别
变量的声明和赋值究竟有什么不同
声明和赋值是同时完成的
第一次赋值时
如果是 第二次赋值 呢?
纯赋值
声明了之后
再有 等号赋值 就是 第二次赋值
是 纯赋值
没有声明新的变量
总结
这次 了解了isidentifier的细节
关于 关键字
关于 下划线
如何查询 变量所指向的地址?
id
如何查询 已有的各种变量?
locals
如果 用一个变量a的值
给另一个变量b 赋值
是什么样的过程 呢??🤔
我们下次再说!👋
蓝桥->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython