[oeasy]python0050_动态类型_静态类型_编译_运行

news2024/12/25 9:22:26

动态类型_静态类型

回忆上次内容

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

图片描述

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

变量名

  • 首先
    • 在变量名上想办法
  • 名字
    • 本身就有某些含义
    • 具有某些可读性
  • 可以把
    • a 换成 apple
      • :4,10s/a/apple/gc
      • 过程中需要用Y/n进行确认

图片描述

  • b 换成 banana

    • :11,17s/b/banana/gc
  • 变量名 变长

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

  • python 是动态类型的

    • 什么是动态类型呢?

动态类型 - dynamic type

  • 去游乐场看看

图片描述

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

静态类型 - static type

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

图片描述

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

静态类型 vs 动态类型

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

图片描述

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

动态类型的优势

  • 动态类型语言里 解释脚本语言多
    • 类型 全靠 解释器想当然
    • 因为 不需要编译
    • 能解释 就行
    • 自由 散漫
      • 不怎么 追求明确
  • 这种灵活性
    • 导致python跑起来很容易
    • 而且容易和各种其他编程语言配合
    • 是 python 被叫做胶水语言(glue Language)的原因

图片描述

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

声明演示

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

自省 introspection

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

图片描述

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

type函数

图片描述

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

图片描述

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

自省之后

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

图片描述

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

刻意提醒

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

图片描述

  • 再明确一下这两个前缀

前缀

  • s前缀

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

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

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

图片描述

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

匈牙利命名法

  • 匈牙利命名法

图片描述

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

匈牙利命名法由来

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

图片描述

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

后来

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

图片描述

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

运算结果

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

图片描述

  • input 函数
    • 得到的 是什么类型 呢?

input 函数返回值类型

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

图片描述

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

转化函数

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

图片描述

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

查询函数

  • help(int)

图片描述

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

整合程序

图片描述

  • 这下
    • 我们可以明确变量类型了

总结

  • 这次 直接 修改代码

  • 增强 程序的可读性

    • 让变量标识符 具有明确的语义
  • 把变量的类型

    • 明确标记在标识符上
    • 就像
      • 把缩进 作为程序块的分界一样
      • 明确起来
  • 明确了

    • 静态语言和动态语言
  • python 属于

    • 要求没有那么严格的 动态语言
    • 这对于 初学者很友好
    • 无需明白变量 是 怎么存储的
    • 不过很多时候 也容易不明所以
  • 想要 真正成为编程高手

    • 不但要 明确 变量的数据类型
    • 而且 要知道 这数据类型 是怎么存储的
  • 想要 了解数据 具体是怎么存储 的

    • 从 哪种数据类型 开始呢 ?🤔
  • 下次再说!👋

  • 蓝桥->https://www.lanqiao.cn/courses/3584

  • github->https://github.com/overmind1980/oeasy-python-tutorial

  • gitee->https://gitee.com/overmind1980/oeasypython

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv_c++学习(六)

一、视频加载与摄像头调用 视频、摄像头加载 VideoCapture(filename, CAP_ANY)对以上实例解释如下: 若读取的为本地视频,则filename为视频名称,若读取的是摄像头数据,则为int类型的摄像头id。 视频属性的获取 视频属性可以通过…

手握美团offer,结果背调红灯,哭了....

相信很多人都会包装简历,尤其是工作经历,不过也有人会填一下虚假的背景信息,比如公司leader或HR,小公司没有实力过多进行背调,但是大企业就不同了,他们有方法了解到实际的情况。 背调包括候选人以往的经历…

RHCSA之Linux的安装步骤

目录 RHCSA之环境配置 需要的软件 VMwareWorkstation安装 1.打开VMwareWorkstation安装包 2.进入安装界面点击下一步 3. 在我接受许可协议打 √ 后,点击下一步 4.在安装位置选择更改 5. 更改目标安装位置,点击确定 6.疯狂点击下一步 8.点击安装 9.…

DDIM模型代码实现

背景 前面已经出了一系列的文章来介绍大模型、多模态、生成模型。这篇文章会从更微观和更贴近实际工作的角度下手。会给大家介绍下前面讲到的diffuiosn model具体怎么来实现。文章结构如下: 1.介绍Diffusion Model包括哪些零部件,这些零部件衔接关系 …

jvm梳理

jvm是一个虚拟机,用于运行java代码,类的编译到运行主要为一下: 通过javac.exe编译,产生class文件,然后通过类加载器加入jvm: 类加载器: 引导加载器:使用c编写,负责java的…

【高项】项目绩效域,信息文档配置与变更,标准与规范管理(第4版教材第18-19,24章,项目规范知识)

文章目录 1、配置与变更管理1.1 信息文档1.2 配置管理1.3 变更管理 2、标准规范(合同管理,知识产权)2.1 合同管理2.2 知识产权和标准规范(合同法,招投标法,著作权法,政府采购法)2.3 …

力扣算题Day17

110.平衡二叉树(递归很难理解,思维很重要) 下面才是做二叉树的一种正确思维: copy他人运行代码: class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right right class Solution:def judgeDepth(self, …

自底向上分析概述

4-8自底向上的分析概述_哔哩哔哩_bilibili (开始准备期末考试)(可菜) 移入-规约分析: 每次归约的符号串称为“句柄”,一旦句柄在栈顶形成,我们立即将它规约,因此每一步规约都是最左…

[JAVA EE]创建Servlet——继承HttpServlet类笔记2

创建Servlet的方式之一:继承HttpServlet类(经常使用) 如果请求方式为get请求则调用doGet()方法; 如果请求方式为post请求则调用doPost()方法。 开发中通常不会在两个方法中写重复的代码,会造成代码冗余。 Request 一、获取请求…

[前端基础]websocket协议

(1)websocket websocket(简写为ws),是一种轻量化的协议,经过最开始的握手阶段以后,前后端之间允许自由地发送信息不受限制(建议发送json字符串).虽然理论上这个东西是属于协议内容,但是已经被疯狂封装得像框架一样了. websocket协议具有天然的优势处理前端多线程并发,并且只需…

Android---Glide的基本使用

目录 Glide 基本使用 Glide 进阶 Glide 是一个快速高效的 Android 图片加载库,可以自动加载网络、本地文件,app 资源中的图片,注重于平滑的滚动。 Glide 第一次加载一张图片后,就会自动帮我们把这张图片加入到内存中进行管理。…

Linux内核同步之RCU机制基础

Why RCU 1. 中断与抢占 当一个进程被时钟中断打断后,kernel运行tick中断处理程序(一般是top half),中断处理程序运行结束后,有两种情况: 之前的进程获得CPU继续运行。 另一个进程获得了CPU开始运行&…

AI智慧安监:打电话/玩手机智能检测,构筑安全生产新防线

1、方案背景 在油库、加油站、化工厂等场景中,安全生产是首要的监管问题,因为有易燃物品的存放,打电话很容易引起火灾爆炸等安全事故,造成巨大的生命和财产损失。因此,对人员行为的监管是安全的关键,在一些…

计算机图形学 | 实验六:旋转立方体

计算机图形学 | 实验六:旋转立方体 计算机图形学 | 实验六:旋转立方体Z-缓冲GLM函数库PVM矩阵PVM矩阵的使用 华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 计算机图形学 | 实验六:旋转…

怎么看待QA(软件测试)漏测bug?

先抛出我的2个观点: 1、漏测不一定是测试的锅。但当问题发生时,测试第一时间不要去拒绝推卸责任,而是要先去解决漏测问题。 2、漏测问题的及时处理很重要,但是避免再次漏测更重要。 为了将此问题阐述的更清楚,我将通过…

SSM框架学习-DI依赖注入方式实例

DI依赖注入:依赖注入(Dependency Injection, DI)是一种设计模式,用于将一个对象所需要的其他对象的引用或依赖关系从代码中解耦出来,将其交由某个第三方来管理,使得对象本身更加独立,便于测试和…

使用读写锁提高并发

我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用: 只允许一个线程写入(其他线程既不能写入也不能读取);没有写入时&#xf…

基于深度学习的三维重建网络PatchMatchNet(三):如何利用patchmatchnet完成自己场景的数据集制作与利用自己的数据完成三维重建工作

目录 1.如何使用本篇博客 1.1 patchmatchnet网络环境配置 1.2 colmap环境配置 2.如何利用colmap制作自己的三维重建数据集 2.1 采集数据 2.2 使用colmap计算位姿 2.3 转换位姿到MVS读取的格式 2.4 剔除离群图片 2.5 运用patchmatchnet进行三维重建 1.如何使用本篇博客 …

【MySQL】简单使用

数据库:文件,管理系统 类别:关系型,非关系型(nosql) C/S模式(客户端服务器) mysql登录 用户名&密码 默认管理员:root 登录:Linux管理员身份运行客户…

为什么二极管具有单向导通性

大家都知道二极管具有单向导通性,比如一个双极性的信号通过二极管后会变成一个单极性的信号。 为了弄清这个问题先来看一下二极管的构成。 在纯净的硅晶体中掺入五价元素,比如磷,就形成了N型半导体,掺入的五价元素多余的电子很容…