Skip to content

Latest commit

 

History

History
321 lines (238 loc) · 7.82 KB

150-188798-动态类型_静态类型_编译_运行.sy.md

File metadata and controls

321 lines (238 loc) · 7.82 KB
show version enable_checker
step
1.0
true

帮助手册

回忆上次内容

  • 上次了解了 帮助文档的 生成
    • 开头的三引号注释 可以生成 帮助文档
    • 文档 可以写成网页
  • python3 本身
    • 也有 在线的帮助手册
  • 但 目前的网页
    • 并没有解决 程序可读性的问题

图片描述

  • 什么方法
    • 可以让程序 更可读么?🤔

变量名

  • 首先
    • 在变量名上想办法
  • 名字
    • 本身就有某些含义
    • 具有某些可读性
  • 可以把
    • a 换成 apple
      • :4,10s/a/apple/gc
    • b 换成 banana
      • :11,17s/b/banana/gc

图片描述

  • 变量名 变长
    • 并不会让 程序变慢
  • 只是 换个 指向同一盒子空间的名字 而已

动态类型 - dynamic type

  • python 是动态类型的
    • 什么是动态类型呢?
      • 去游乐场看看

图片描述

  • 动态类型
    • 有的时候指向整型数字
    • 有的时候又指向字符串
    • 到底是指向什么的类型?
  • 这两种类型 其实在内存里 不一样
    • 数字 是把具体的数值 变成二进制形态
      • 存在 内存盒子中
    • 字符串 是把字符串中每个字符的 ascii二进制值
      • 存在 内存盒子中
  • 这种指向类型
    • 可以从整型数字
    • 到字符串的
    • 就是态类型
  • python 是 一门动态类型语言
  • 那有没有 静态类型呢?!

静态类型 - static type

  • c语言 就是 静态类型语言

图片描述

  • 声明了 a是一个整型数字
  • 不能再将a声明为字符串

静态类型 vs 动态类型

  • 变量的声明是编程语言的核心
  • 静态类型
    • 声明之后
      • 数值 可以改变
      • 类型 不再改变
      • 提高效率
      • 需要在编程前思考清楚
      • 类型错了
      • 编译都无法通过

图片描述

  • 动态类型
    • 声明之后
      • 类型可以改变
      • 自主灵活
      • 但容易出错
动态 静态
PHP C/C++
Ruby JAVA
Python C#

动态类型的优势

  • 动态类型语言里 解释脚本语言多
    • 类型 全靠 想当然
    • 因为 不需要编译
    • 能解释 就行
    • 自由 散漫
      • 不怎么 追求明确
  • 这种灵活性
    • 是 python 被叫做胶水语言(glue Language)的原因

图片描述

  • 动态语言一时爽
    • 后期重构火葬场

声明演示

  • 不同语言声明变量的语法不一样
  • 看看下面这些语言
语言 声明
vb Dim sum As Integer
c/c++ java c# int sum;
Pascal Delphi sum:Integer;
Javascript var sum;
  • 可以看出静态类型都很明确
  • 动态类型就很模糊
  • 不知道到底用的是什么类型
  • python 虽然是动态语言
    • 但是类型这个事情
    • 我们一定要在脑子里明确
    • 甚至在源代码层面明确

自省 introspection

  • 虽然 python 可以不在乎数据类型
  • 可是我们必须明确数据类型
  • 这个时候就需要自省
    • introspection

图片描述

  • introspectation
    • intro
      • 向内的
    • spectation
      • 来自 *spec-
  • 向内看就是自省
  • 怎么自省呢?

type函数

图片描述

  • 自省
    • 知道自己是干嘛的

图片描述

  • 知道了之后有什么用呢?

自省之后

  • 自省之后可以知道自己的类型

图片描述

  • 不同类型有不同的函数和运算方式
  • 可以在名字上刻意提醒自己吗?

刻意提醒

  • 把类型写在变量名上
    • 从而提高可读性
    • s
      • 字符串
      • string
    • i
      • 整型数字
      • integer
  • 这样变量不但有了明确的语义
  • 而且明确了数据类型
  • 更容易发现错误

图片描述

  • 再明确一下这两个前缀

前缀

  • s前缀

    • 意思来自于string
    • 代表变量是字符串型的
  • i前缀

    • 意思来自于integer'
    • 代表变量是整型的
  • 这样变量名

    • 不但包含了变量含义
    • 而且包含了变量的类型
    • 甚至可以包括描述信息

图片描述

  • 这种标识变量类型的方法来自于哪里呢?

匈牙利命名法

  • 匈牙利命名法

图片描述

  • 匈牙利命名法
    • 命名惯例本来是小驼峰的
    • 现在改成蛇形的
  • 这样就可以
    • 明确知道变量的数据类型了
  • 可是这个和匈牙利有什么关系呢?

匈牙利命名法由来

  • 查尔斯·西蒙尼
    • 生于匈牙利布达佩斯
    • 和冯·诺依曼一个地方
  • 父亲是布达佩斯大学电气工程教授
    • 研发了核粒子加速器
    • 他从小就在计算机实验室做兼职
    • 他研发了编译器并卖给了政府
  • 17岁
    • 离开了匈牙利
    • 在丹麦写ALGOL的编译器
    • 后来去了美国

图片描述

后来

  • 在施乐公司
    • Butler Lampson推动下
      • 开发了第一个所见即所得文档准备程序
      • WYSIWYG /ˈwɪziwɪɡ/
    • 原来都是用代码模式编辑富文本文档
    • 此后可以所见即所得

图片描述

  • 微软公司
    • 1981年拜访比尔盖茨
    • 从此加盟微软
    • 主导word和excel的研发
    • 并提出匈牙利命名法
  • 匈牙利命名法
    • 明确变量类型
    • 这对于运算特别重要
  • 由于变量类型不同
    • 他们的运算结果就会不同么?

运算结果

图片描述

  • 确实可以是不同的
  • input 函数得到的是什么类型呢?

input 函数返回值类型

  • 得到的这个东西
  • 好像是字符串类型的

图片描述

  • 可是我们要的是整数类型啊?
  • 怎么办?

转化函数

图片描述

  • 使用 int 函数就可以完成相应的转化
  • 那么 这个 int 函数到底是什么意思来着?

查询函数

  • help(int)

图片描述

  • 就是可以把 str 类型的变量转化为 int 型的变量
  • 总之就是好用
  • 我要把这个整合到我们的程序中

整合程序

图片描述

总结

  • 这次直接修改代码
  • 增强程序的可读性
    • 让变量标识符具有明确的语义
  • 把变量的类型明确标记在标识符上
    • 就像把缩进作为程序块的分界一样
    • 明确起来
  • 明确了静态语言和动态语言
    • python 属于要求没有那么严格的语言
    • 这对于初学者很友好
    • 无需明白变量是怎么存储的
    • 不过很多时候也容易不明所以
  • 想要真正成为编程高手
    • 不但要明确变量的数据类型
    • 而且要知道这数据类型是怎么存储的
  • 现在我们来了解数据具体是怎么存储的
    • 从哪种数据类型开始呢?🤔
  • 下次再说!👋