[oeasy]python073_下划线在python里是什么含义_内部变量私有变量
导入import
回忆上次内容
- 上次直接从模块中导入变量、函数
- from my_file import pi
- 导入my_file.pi
- 并作为 pi 使用
- from my_file import pi as my_pi
- 导入变量 并 重命名
- 为什么 从模块中导入的变量 需要改名呢???
冲突(local name clashes)
- 回忆 冲突现场
from math import pi as math_pi
from my_file import pi as my_pi
print(locals())
- 为了避免
- local name clash
- 本地变量名 冲突
- python帮助 里
- 是怎么说的 呢?
pep8
- 我们 看看pep-8
- https://peps.python.org/pep-0008/#imports
- 因此 要特别注意
- 不要使用from xxx import *
- 因为
- 这样 会把模块里面
- 所有的变量 导入进来
- 特别容易 冲突
- local name clashes
- 这怎么理解呢?
做个测试
:e test.py
- 导入 random中所有变量
from random import *
print(dir())
- 结果 导入了很多成员变量
- 是不是都导入进来了呢?
观察模块目录
from random import *
print(dir())
import random
print(dir(random))
- 有一些变量没有被导入进来
- 这些变量以下划线(_)开头
- 是 模块的 内部变量
- 为什么 下划线开头
- 就是 内部变量 呢?
寻找主题
- 去游乐场
help("topics")
- 查看帮助主题
- 应该找的主题是
- 标识符
- identifiers
标识符
help("IDENTIFIERS")
- 找到标识符的帮助
- 看到PEP3131
- 回忆 中文 可以作为 变量名
翻页
- ctrl+f
- 向后翻页
- 举个例子来说明
理解内部
- from random import *
- *代表所有的
- 非下划线开头的变量
- 在random模块中 有很多变量和函数
- 非下划线开头的 可以被导入进来
- 下划线开头的 不能被导入进来
- 导入进来的
- 都是 没有 下划线的
- 如果 就想要
- 导入 带下划线的 内部变量 呢?
点名道姓
from random import _e
- 指定好那个变量的名字
- 就可以
- 我就想要引入_e这个内部变量
- 有下划线开头的变量
- 是隐藏变量
- 需要点名导入
变量
- 点名 导入
- 带下划线的 隐藏变量
- 就可以了
- 变量名 前面
- 加下划线
- 指的是 模块内部变量
- 如果在 变量名 后面
- 加 下划线
- 又是 什么意思 来着?
回忆命名法中的下划线
- 避免和函数、模块 重名
max_ = max(5, 6)
- 再回顾我们使用的是
- Snake Naming Convention
- 蛇形命名法
- 综合下划线的使用情况
位置和数量 | 作用 | 例子 |
单个下划线 | 上次表达式的值 | _ |
一个放前面 | 隐藏变量 | _e |
一个放后面 | 避免名字冲突 | max_ |
一个放前边 | 私有属性 | __attribute |
两个放两边 | 系统变量 | __builtins__ |
总结
- 这次总结 下划线 用法
- 想写个 实用点儿的程序??
- 下次再说