动态类型_静态类型
回忆上次内容
 
  • 上次了解了 帮助文档的 生成
  • 开头的三引号注释 可以生成 帮助文档
  • 文档 可以写成网页
 
  • python3 本身
  • 也有 在线的帮助手册
 
  • 目前的程序
  • 提高了 可读性
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 还有什么方法
  • 可以让程序 更可读么?
 
  • 可以 根据 变量名
  • 知道 变量类型 吗?
 
 
动态类型 - dynamic type
 
  • 编写一个test.py
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 运行结果
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • age变量 的类型
  • 从 整型数字
  • 转变为 字符串
 
  • 同一变量名age 指向的类型
  • 可以从整型数字
  • 变动到 字符串
  • 就是动态类型
 
  • python 是 一门
  • 动态类型语言
 
  • 那有没有 静态类型呢?!
 
静态类型 - static type
 
  • 编辑 test.c
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • :w|!gcc %
  • 保存并且
  • 用外部命令gcc 编译当前文件
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 编译失败
  • test.c中声明了
  • age 是 整型变量
 
  • 不能 再将
  • 字符类型’1’
  • 赋给变量age
 
  • 变量类型一旦被声明
  • 就不能动了
  • 这就是 静态类型
 
  • c 是 一门
  • 静态类型语言
 
 
静态类型 vs 动态类型
 
  • 变量类型 是
  • 编程语言的核心
 
  • 静态类型
  • 声明类型 之后
  • 数值 可以改变
  • 类型 不再改变
  • 提高效率
 
  • 需要在编程前思考清楚
  • 类型错了
  • 编译都无法通过
 
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 动态类型
  • 声明之后
  • 类型 还可以改变
  • 自主灵活
 
  • 但 容易忘记 变量类型
  • 导致 出错
 
 
 
动态
静态
PHP
C/C++
Ruby
JAVA
Python
C#
 
动态类型的优势
 
  • 动态类型语言里
  • 解释脚本语言多
  • 类型 全靠 解释器
  • 因为 不需要编译
  • 能解释得通 就行
 
  • 自由 散漫
  • 不怎么 追求明确
 
 
  • 这种灵活性
  • 导致python
  • 跑起来很容易
 
  • 而且
  • 容易和各种其他编程语言 配合
 
 
  • 这就是 python 被叫做
  • 胶水语言(glue Language)的原因
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 各种语言
  • 是怎么声明变量的呢?
 
 
声明演示
 
  • 不同语言
  • 声明变量的语法不一样
 
  • 看看下面这些语言
 
 
语言
声明
vb
Dim sum As Integer
c/c++ java c#
int sum;
Pascal Delphi
sum:Integer;
Javascript
var sum;
 
 
  • 可以看出
  • 静态类型都很明确
  • 动态类型就很模糊
  • 不知道到底用的是什么类型
 
 
  • python 虽然是动态语言
  • 但是 类型这个事情
  • 一定要明确
  • 最好 在源代码层面明确
 
  • 否则
  • 动态语言 一时爽
  • 后期重构 火葬场
 
 
自省 introspection
 
  • 虽然 python中 变量声明
  • 可以不在乎数据类型
 
  • 可是
  • 我们必须明确 数据类型
 
  • 这个时候 就需要自省
  • introspection
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • introspectation
  • intro
  • 向内的
 
  • spectation
  • 来自 *spec-
 
 
  • 向内看就是自省
  • 怎么自省呢?
 
type函数
 
  • type就是类型
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 自省
  • 知道自己是干嘛的
  • 是什么类型额
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 知道了之后有什么用呢?
 
自省之后
 
  • 自省之后
  • 知道了自己的类型
 
  • 不同类型 的变量
  • 有不同的成员函数 和 运算方式
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 可以在变量名上
  • 刻意提醒 吗?
 
 
刻意提醒
 
  • 把类型作为前缀
  • 明确写在变量名上
  • 从而提高可读性
  • s
  • string
  • 字符串
 
  • i
  • integer
  • 整型数字
 
 
  • 这样变量
  • 不但 有了 明确的语义
  • 而且 明确了 数据类型
 
  • 更容易 发现错误
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 再明确一下这两个前缀
 
前缀
 
  • s前缀
  • 意思来自于string
  • 代表变量是字符串型的
 
  • i前缀
  • 意思来自于integer’
  • 代表变量是整型的
 
  • 这样变量名
  • 不但包含了变量含义
  • 而且包含了变量的类型
  • 甚至 可以包括 描述信息
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 这种 标识 变量类型的方法
  • 来自于哪里呢?
 
 
匈牙利命名法
 
  • 匈牙利命名法
  • 将类型 作为 变量名前缀
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 匈牙利命名法
  • 命名惯例 本来是小驼峰的
  • 现在根据python的命名惯例(name convention)
  • 改成蛇形的(snake case)
 
  • 这样就可以
  • 明确知道 变量的数据类型 了
 
  • 可是 这个和匈牙利
  • 有什么关系呢?
 
 
匈牙利命名法由来
 
  • 查尔斯·西蒙尼
  • 生于 匈牙利 布达佩斯
  • 和 冯·诺依曼 一个地方
 
 
  • 父亲 是 布达佩斯大学 电气工程教授
  • 研发了 核粒子加速器
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 西蒙尼 从小 就在计算机实验室 做兼职
  • 研发了 编译器
  • 并卖给了政府
 
  • 17岁
  • 离开了匈牙利
  • 在丹麦写ALGOL的编译器
 
  • 后来
  • 去了美国
 
 
 
后来
 
  • 在施乐公司
  • Butler Lampson推动下
  • 开发了第一个所见即所得文档准备程序
  • WYSIWYG /ˈwɪziwɪɡ/
 
 
  • 原来
  • 都是 用代码模式 编辑富文本文档
 
  • 此后
  • 可以 所见即所得
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 1981年
  • 遇到 比尔盖茨
  • 从此 加盟微软
  • 主导 word和excel的研发
  • 并倡导 匈牙利命名法
 
  • 匈牙利命名法
  • 明确 变量类型
  • 这对于 运算特别重要
 
  • 由于 变量类型不同
  • 运算结果
  • 就会不同么?
 
 
 
运算结果
 
  • 类型不同
  • 确实 运算结果是不同的
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • input 函数
  • 返回得到的 变量 是什么类型 呢?
 
 
input 函数返回值类型
 
  • input函数 返回值的类型
  • 好像是字符串类型的
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 可是
  • 需求要的是 整数类型 啊?
 
  • 怎么办?
 
转化函数
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 使用 int 函数
  • 就可以完成相应的转化
 
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 那么 这个 int 函数
  • 到底是 什么意思 来着?
 
 
查询函数
 
  • help(int)
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • int函数
  • 可以把 str 类型的变量
  • 转化为 int 型
 
  • 要把这个int函数
  • 整合到程序中
 
 
整合程序
 
  • 修改如下
 
 

 
添加图片注释,不超过 140 字(可选)
 
 
  • 可以从变量名上
  • 明确读出 变量类型了
 
 
总结
 
  • 这次 分辨了
  • 静态语言
  • 动态语言
 
  • python 属于
  • 对类型要求 没有那么严格的 动态语言
  • 这对于 初学者很友好
  • 无需明白变量 是 怎么存储的
  • 不过很多时候 也容易弄不清变量类型
 
  • 直接 修改代码
  • 增强 程序的可读性
  • 把变量的类型
  • 明确标记在 变量名上
 
  • 就像
  • 把缩进 作为程序块的分界一样
  • 明确起来
 
 
  • 想要 真正成为编程高手
  • 不但 要
  • 明确 变量的数据类型
 
  • 而且 要
  • 知道 这数据类型
  • 是怎么存储的
 
 
 
  • 想要 了解数据
  • 是怎么存储的
  • 从 哪种数据类型 开始呢 ?
 
  • 下次再说!
  • 蓝桥->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython
 

[oeasy]python0070_动态类型_静态类型_编译_运行_匈牙利命名法的更多相关文章

  1. O-C相关-08-动态类型与静态类型

    08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的EC ...

  2. OC 动态类型和静态类型

    多态 允许不同的类定义相同的方法 动态类型 程序直到执行时才能确定所属的类 静态类型 将一个变量定义为特定类的对象时,使用的是静态形态 将一个变量定义为特定类的对象时,使用的是静态类型,在编译的时候就 ...

  3. 【C#基础概念】编程语言:弱类型、强类型、动态类型、静态类型

    一.看图区别编程语言 一般来讲,看第一个图就够了 这图是引用的,有错误,Python是强类型,但是图片中却归为弱类型了. 业界堆静态和动态的区分达到共识. 但是堆强类型和弱类型语言还未达成共识.我个人 ...

  4. C++中的动态类型与动态绑定、虚函数、运行时多态的实现

    动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...

  5. mypy 支持静态类型编程的python变种

    每种编程语言都有一群固定的用户,对于那些习惯将不同编程语言用成同样的感觉的人来说,最是难受.因为每种语言都有它独特的设计『哲学』和擅长的应用领域. PHP给大家的一贯的印象都是动态弱类型语言,Pyth ...

  6. Java——静态类型 实际类型

    public class test { static class father { void run() { System.out.println("father run"); } ...

  7. go静态类型

    go静态类型 静态类型语言意味着变量必须指定一个类型,例如整型.字符串.布尔型和数组等.可以在声明变量时指定变量类型.大多数情况下,让编译器自动去推断变量类型(我们将看到一些简单的例子). 关于静态类 ...

  8. 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.

    Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...

  9. C语言,C#,Java,JavaScript之强类型与弱类型

    奇葩的我今天想到一个坑爹的问题,都说Java是强类型的语言,JavaScript是弱类型的语言. 嗯嗯,那初学时候的C语言呢? 呵呵哒,突然觉得短路了.说Java是强类型的语言是因为遇到这样的情况: ...

  10. Android:JNI与NDK(二)交叉编译与动态库,静态库

    欢迎关注公众号,第一时间获取最新文章: 本篇目录 一.前言 本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,li ...

随机推荐

  1. git使用其它

    创建目录 切换到本地新建的dev分支,目录下还是这个目录下的文件.我push一下,指定推送到dev分支,那么dev分支就在远程仓库同步创建,并且文件也是本地这个目录下的文件,一样的. 好像得改个名字才 ...

  2. 创建一个flutter项目

    启动Android  Studio,点击[Start a new Flutter project] 如果没有这项选项,请先安装Flutter插件 具体安装方法,可参考  flutter开发环境的搭建 ...

  3. layui 无限级多级菜单

    layui 二级菜单 :https://gitee.com/hslr/layui_extension_modulemenu 我更改了下,变成了无线级菜单 layui.define('element', ...

  4. 微信开发者工具拉取gitlab远程代码报Pull failed原因分析:

    可能出现的原因: 本地主机上没有安装node node下载地址: 1 https://nodejs.org/zh-cn/download/ 没有保存gitlab的用户名和密码

  5. volatile关键字到底有什么作用

    提示:更多优秀博文请移步博主的GitHub仓库:GitHub学习笔记.Gitee学习笔记 volatile是Java提供的一种轻量级的同步机制.Java 语言包含两种内在的同步机制:同步块(或方法)和 ...

  6. Android 11(R) MultiMedia(十六)MediaCodec异步模式实现一个简易播放器

    MyDecoderBase.h #ifndef __MY_DECODERBASE_H__ #define __MY_DECODERBASE_H__ #include <media/stagefr ...

  7. 【译】使用 .NET Aspire 和 Visual Studio 开发云原生应用

    我们很高兴地向大家介绍 .NET Aspire,它旨在简化 .NET 云原生应用程序的构建和管理方式..NET Aspire 为像您这样的开发人员提供了一个改进的.有主见的框架,用于构建分布式应用程序 ...

  8. 使用Harbor作为Rainbond默认容器镜像仓库,扩展Rainbond镜像管理能力

    Rainbond是一体化的云原生应用管理平台,它提供"以应用为中心"的抽象,使用者不需要学习K8s和容器,平台将K8s和容器封装在内部,这种封装方式能极大提高使用的易用性和安装的便 ...

  9. 30万奖金池鼓励工控人,AIRIOT智慧物联应用场景创新大赛等你来战!

    随着工业和智慧领域数智化发展步伐的逐步加快,智慧物联应用场景越来越广泛,涵盖了智慧城市.智能园区.智慧能源.智慧电力.智能制造.工业物联网等多个领域.航天科技控股集团股份有限公司举办[AIRIOT智慧 ...

  10. 安装图形化界面时候报错 Transaction check error: file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch

    报错 Transaction check error:file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x8 ...