Skip to content

Latest commit

 

History

History
367 lines (245 loc) · 7.49 KB

048-851184-关键字_keyword_变量名与下划线_dunder_声明与赋值_dir.sy.md

File metadata and controls

367 lines (245 loc) · 7.49 KB
show version enable_checker
step
1.0
true

变量名下划线

回忆上次内容

  • 上次了解了
    • hello world是怎么来的
    • 1969年的c语言
    • 开启了很多的习惯
标志 含义
括号 代表函数
print 输出
单引号 单个字符
双引号 字符串
main 主函数
  • c语言时代 形成的
    • 标识符命名规则
    • 影响到 今天python中的命名规则

图片描述

  • 是不是 满足了 规则
    • isidentifier() 为 True
    • 就一定可以作为标识符呢?

尝试

  • 可以将 import当 变量名吗?
    • import 是否是
      • 合法标识符
    • isidentifier

图片描述

  • import
    • 是合法标识符
    • 但不能 被声明为 变量 !😠
  • isidentifier函数
    • 不灵 了吗?🤔

翻看文档

import keyword
keyword.kwlist
  • import 属于关键字

图片描述

  • 找出我们用过的关键字

关键字

  • 新模块 module
import keyword
keyword.kwlist
  • 关键字
    • keyword 关键的字
    • python能写出程序
    • 全靠他们

图片描述

  • 回忆一下

那片黑暗森林

for num in range(0, 128):
    if num % 8 == 0:
        print()
    print(chr(num), end="\t")
  • 结果

图片描述

True

  • 从标识符命名规则来说
    • 字符串"True"符合命名规则

图片描述

  • 但是True
    • 有特殊含义
    • 不能被 声明 为变量
    • 属于关键字

图片描述

  • 再试试 del 这个 keyword

观察

  • del 是不是
    • 合法标识符
    • identifier
"del".isidentifier()

图片描述

  • 确实是合法标识符
  • 但是他能被 赋值吗?

尝试

del = 1
  • 尝试 对 del 声明并赋值

图片描述

  • 失败了

    • 因为 del 是 关键字
    • 所以发生了 语法错误
    • SyntaxError
  • 除了 关键字 keywords 之外

    • 还有哪些 不适合 做 变量标识符的 呢?

常见错误

int = 5
a = int(6)
  • 将 5 赋给 变量 int

图片描述

  • int 一旦被 重新 赋值
    • 就不能够完成类型转化了

max

  • max是
    • 内建的函数
    • builtin-function

图片描述

  • 将 1 赋给 max 之后
    • max 不再是 内建的函数

图片描述

  • TypeError
    • 整数 对象无法调用

图片描述

  • max 此时
    • 是一个 整形变量名
    • 不是 函数名

删除max

del max
  • 在本地删除 max 变量之后

图片描述

  • 本地变量 max 消失
    • __builtins__.max 从新被识别为
    • 内建函数
    • builtins-function
  • 如果我就想
    • 使用max变量名
    • 表示最大值
    • 还不想破坏max函数
  • 怎么办?

变量

  • 班里面 有个张伟
    • 新来一个 就不能 还叫张伟
    • 只能叫 大张伟 或者 小张伟

图片描述

  • 如果使用max 作为变量名
    • 会把max函数 屏蔽掉
  • 使用max_
    • 不会屏蔽 max函数

图片描述

  • 下划线
    • shift + -
    • 得到 _

两端双下划线(dunder)

图片描述

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

图片描述

  • dunder变量都是系统内部的
    • 不要轻易破坏

dunder来历

  • 两个下划线

    • Double UNDERscore
    • 省略读法 dunder
  • __builtins__

    • 读作 dunder builtins
    • dunder 是 什么意思呢?
  • 最初提议

Dunder (Double UNDERscore) Alias

Mark Jackson was the first to suggest dunder as a speech shorthand for double underscores (__) in a reply to a query from Pat Notz. Ned Batchelder later stressed the need for a way of pronouncing __:

An awkward thing about programming in Python : there are lots of double underscores. [snip] My problem with the double underscore is that it's hard to say. How do you pronounce init? "underscore underscore init underscore underscore"? "under under init under under"? Just plain "init" seems to leave out something important. I have a solution: double underscore should be pronounced "dunder". So init is "dunder init dunder", or just "dunder init".

  • 在发明 dunder 之前

    • __init__ 要念作 double underscore init
      • 其中的double underscore
        • 有17个字符
        • 发音是6声
      • 而dunder
        • 只有6个字符
        • 发音是2声
  • 从此 dunder 这个单词

    • 就被发明出来了
  • 可以查询出

    • 内建模块中的 函数名 吗?
  • 再回头

    • 来看看 a 这个变量 的
    • 声明 和 赋值
  • 如果只有一个下划线

    • 也是一个变量吗?

上次的值

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

图片描述

细节

  • a 两边并不加引号
    • 因为 这里的 a 是 变量标识符
    • 而不是 字符串
      • 如果加了双引号 就是字符串了

图片描述

  • 在等号两端 都保留 有一个空格
    • 可是 为什么要 加空格呢?

可读性

  • 增加文档的可读性
    • 不会 影响程序的执行速度

图片描述

  • 这两句话从何说起

加空格的原因

import this
  • 这两句话也来自于
    • python之禅
    • The Zen of Python

图片描述

  • 现在 到底
    • 多少变量呢?

locals()

  • 查询 本地变量
    • 用 内置函数 locals
      • max_
      • this

图片描述

  • 可以查询
    • 关于 locals 的帮助

回忆 locals函数

  • locals()
    • 返回的 是
    • 包含 当前域中 所有变量的
    • 字典

图片描述

  • 声明和赋值 都使用等号
    • 声明并赋值 变量a 之后
    • 变量a 在内存里真的有位置了么?

图片描述

  • del之后
    • 就会消失

总结

  • 这次 了解了 命名规则

    • 有两类 不适合做 标识符
      1. 关键字
      2. 已有的函数名、类名、模块名
  • 关于 下划线

位置和数量 作用
一个放后面 避免名字冲突
两个放两边 系统变量
  • 变量命名还有什么规则吗??🤔
  • 我们下次再说!👋