Skip to content

Latest commit

 

History

History
217 lines (144 loc) · 4.22 KB

073-3123859-下划线在python里是什么含义_内部变量_私有变量_系统变量.sy.md

File metadata and controls

217 lines (144 loc) · 4.22 KB
show version enable_checker
step
1.0
true

导入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

图片描述

  • 因此 要特别注意
    • 不要使用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__

总结

  • 这次总结 下划线 用法

图片描述

  • 想写个 实用点儿的程序??🤔
  • 下次再说 👋