Skip to content

Latest commit

 

History

History
381 lines (285 loc) · 8.54 KB

067-188798-动态类型_静态类型_编译_运行_匈牙利命名法.sy.md

File metadata and controls

381 lines (285 loc) · 8.54 KB
show version enable_checker
step
1.0
true

动态类型_静态类型

回忆上次内容

  • 上次研究了 一行赋值多个变量
    • a = b = 5
    • a, b = 7, 8
  • 还研究了 标识符的惯用命名法
    • python使用的是
      • snake_case
        • 是蛇形命名法
        • 是 用下划线 分隔开小写字母的 命名方法
      • 这样就可以 更合理地 命名变量了
  • 可以将数据的类型
    • 显示在变量名上吗?🤔

动态类型 - dynamic type

  • 编写一个test.py

图片描述

  • 运行结果

图片描述

  • age变量 的类型

    • 从 整型数字
    • 转变为 字符串
  • 同一变量名age 指向的类型

    • 可以从整型数字
    • 到 字符串
    • 就是态类型
  • python 是 一门

    • 动态类型语言
  • 那有没有 静态类型呢?!

静态类型 - static type

  • c语言就是静态类型的
    • 当年和unix互为因果的c语言
  • 编辑 test.c

图片描述

  • :w|!gcc %
    • 保存并且
    • 用外部命令gcc 编译当前文件

图片描述

  • 编译失败
  • test.c中声明了
    • age 是 整型变量
  • 不能 再将
    • 字符类型'1'
    • 赋给变量age
  • 变量类型一旦被声明
    • 就不能动了
    • 这就是 态类型
  • c 是 一门
    • 静态类型语言

静态类型 vs 动态类型

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

图片描述

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

动态类型的优势

  • 动态类型语言里
    • 解释脚本语言多
    • 类型 全靠 解释器
      • 因为 不需要编译
      • 能解释得通 就行
    • 自由 散漫
      • 不怎么 追求明确
  • 这种灵活性
    • 导致python
      • 跑起来很容易
    • 而且
      • 容易和各种其他编程语言 配合
  • 这就是 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函数

  • type就是类型

图片描述

  • 自省
    • 知道自己是干嘛的
    • 是什么类型额

图片描述

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

自省之后

  • 自省之后

    • 知道了自己的类型
  • 不同类型 的变量

    • 有不同的成员函数 和 运算方式

图片描述

  • 可以在变量名上
    • 刻意提醒 吗?

刻意提醒

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

图片描述

  • 再明确一下这两个前缀

前缀

  • s前缀

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

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

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

图片描述

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

匈牙利命名法

  • 匈牙利命名法
    • 将类型 作为 变量名前缀

图片描述

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

匈牙利命名法由来

  • 查尔斯·西蒙尼
    • 生于 匈牙利 布达佩斯
      • 和 冯·诺依曼 一个地方
  • 父亲 是 布达佩斯大学 电气工程教授
    • 研发了 核粒子加速器

图片描述

  • 西蒙尼 从小 就在计算机实验室 做兼职
    • 研发了 编译器
      • 并卖给了政府
    • 17岁
      • 离开了匈牙利
      • 在丹麦写ALGOL的编译器
    • 后来
      • 去了美国

后来

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

图片描述

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

运算结果

  • 类型不同
    • 确实 运算结果是不同的

图片描述

  • input 函数
    • 返回得到的 变量 是什么类型 呢?

input 函数返回值类型

  • input函数 返回值的类型
    • 好像是字符串类型的

图片描述

  • 可是
    • 需求要的是 整数类型 啊?
  • 怎么办?

转化函数

图片描述

  • 使用 int 函数
    • 就可以完成相应的转化

图片描述

  • 那么 这个 int 函数
    • 到底是 什么意思 来着?

查询函数

  • help(int)

图片描述

  • int函数
    • 可以把 str 类型的变量
    • 转化为 int 型
  • 要把这个int函数
    • 整合到程序中

整合程序

  • 修改如下

图片描述

  • 可以从变量名上
    • 明确读出 变量类型了
  • 这代码可读性大大提高

可读性

  • Martin Fowler 有一句话常被大家引用

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

图片描述

任何傻瓜都能写出计算机能理解的代码。优秀程序员写人类能理解的代码。

总结

  • 这次 分辨了
    • 静态类型 语言
    • 动态类型 语言
  • python
    • 属于 动态类型 语言
      • 对类型要求 没有那么严格的
      • 对 初学者很友好
      • 不过 也容易 弄不清变量类型
  • 把变量的类型
    • 标在 变量名上
      • 增强 程序的可读性
    • 就像
      • 把缩进 作为程序块的分界一样
      • 明确起来
  • 想要 真正成为编程高手
    • 要 明确 变量的数据类型
    • 还要 知道 这数据类型 的特性
  • 比如 字符串类型
    • 到底有些什么特性呢?🤔
  • 下次再说!👋