导入import
回忆上次内容
- 上次直接从模块中导入变量、函数
- from my_file import pi
- 导入my_file.pi
- 并作为 pi 使用
- from my_file import pi as my_pi
- 导入变量 并 重命名
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_变量名](https://s2.51cto.com/images/blog/202503/12181625_67d15ef94811b40130.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 为什么 从模块中导入的变量 需要改名呢???🤔
冲突(local name clashes)
- 回忆 冲突现场
from math import pi as math_pi
from my_file import pi as my_pi
print(locals())- 为了避免
- local name clash
- 本地变量名 冲突
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_变量名_02](https://s2.51cto.com/images/blog/202503/12181625_67d15ef93cd5838631.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- python帮助 里
- 是
怎么说的 呢?
pep8
- 我们 看看pep-8
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_03](https://s2.51cto.com/images/blog/202503/12181625_67d15ef95415b60039.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 因此 要特别注意
不要使用from xxx import *
- 因为
- 这样 会把模块里面
所有的变量 导入进来- 特别容易
冲突 - local name clashes
- 这怎么理解呢?
做个测试
:e test.py- 导入 random中所有变量
from random import *
print(dir())- 结果 导入了很多成员变量
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_04](https://s2.51cto.com/images/blog/202503/12181625_67d15ef90f36298901.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 是不是都导入进来了呢?
观察模块目录
from random import *
print(dir())
import random
print(dir(random))- 有一些变量没有被导入进来
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_05](https://s2.51cto.com/images/blog/202503/12181625_67d15ef92a6b273820.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 这些变量以下划线(_)开头
- 是 模块的
内部变量
- 为什么
下划线开头
- 就是 内部变量 呢?
寻找主题
- 去游乐场
help("topics")- 查看帮助主题
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_变量名_06](https://s2.51cto.com/images/blog/202503/12181625_67d15ef99c9761294.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 应该找的主题是
- 标识符
- identifiers
标识符
help("IDENTIFIERS")- 找到标识符的帮助
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_标识符_07](https://s2.51cto.com/images/blog/202503/12181625_67d15ef95edd098877.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 看到PEP3131
- 回忆 中文 可以作为 变量名
翻页
- ctrl+f
- 向后翻页
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_08](https://s2.51cto.com/images/blog/202503/12181625_67d15ef9b50d13837.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 举个例子来说明
理解内部
- from random import *
- *代表所有的
- 非下划线开头的变量
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_变量名_09](https://s2.51cto.com/images/blog/202503/12181625_67d15ef90f0d391378.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 在random模块中 有很多变量和函数
- 非下划线开头的 可以被导入进来
- 下划线开头的 不能被导入进来
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_标识符_10](https://s2.51cto.com/images/blog/202503/12181625_67d15ef93ccbf30566.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 导入进来的
- 都是 没有 下划线的
- 如果 就想要
- 导入 带下划线的 内部变量 呢?
点名道姓
from random import _e- 指定好那个变量的名字
- 就可以
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_变量名_11](https://s2.51cto.com/images/blog/202503/12181625_67d15ef97666119285.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 我就想要引入_e这个
内部变量
- 有下划线开头的变量
- 是隐藏变量
- 需要点名导入
变量
- 点名 导入
- 带下划线的 隐藏变量
- 就可以了
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_12](https://s2.51cto.com/images/blog/202503/12181625_67d15ef95510744663.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 变量名
前面
- 加下划线
- 指的是 模块内部变量
- 如果在 变量名
后面
- 加 下划线
- 又是 什么意思 来着?
回忆命名法中的下划线
- 避免和函数、模块 重名
max_ = max(5, 6)- 再回顾我们使用的是
- Snake Naming Convention
- 蛇形命名法
- 综合下划线的使用情况
位置和数量 | 作用 | 例子 |
单个下划线 | 上次表达式的值 | _ |
一个放前面 | 隐藏变量 | _e |
一个放后面 | 避免名字冲突 | max_ |
一个放前边 | 私有属性 |
|
两个放两边 | 系统变量 |
|
总结
- 这次总结
下划线用法
![图片描述 [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量_下划线_13](https://s2.51cto.com/images/blog/202503/12181625_67d15ef93a83b36023.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 想写个 实用点儿的程序??🤔
- 下次再说 👋
















