python是动态语言还是静态语言?强类型语言还是弱类型语言

article/2025/8/29 11:54:50
  • 首先要清楚静态类型语言和动态类型语言的判别的标准
    定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如果类型检查发生在运行阶段(run time),那么是动态类型语言(dynamically typed languages)
  • 什么是类型检查
    类型检查就是查看变量的类型,然后判断这个表达式是合理的,可以这么理解:编译器通常在编译阶段做类型检查(java),而解释器通常在运行阶段做类型检查(python)
  • 静态类型(static)语言: 所有的变量类型必须被显示地声明,因为这些信息在编译阶段就被需要。例如,在 Java 中
float f = 0.5  #定义变量必须显示声明类型

动态(Dynamic)语言: 显示声明不被要求,因为类型赋值发生在运行阶段。例如在 Python 中,

f = 0.5 #定义变量不需要显示声明
  • 从上面分析可以知道,python是动态语言(类型检查发生在运行阶段,而且不需要显示声明类型),那么强类型和弱类型的判别标准是什么?
  • 先上概念:强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。
  • 再看实例:
    首先看下什么是强类型,在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。例如在Python中:
data = 5 # 在运行时,data被赋值为整型
data = data + "xiaoming" #报错

然而,在弱类型中,它是很容易与其他类型混合计算的,比如同样一门伟大的语言 Javascript,使用它:

var data = 5
data = data + 'xiaoming' //string和int可以结合,程序正常执行
  • 各种语言按照动态/静态,弱类型/强类型的划分:
    在这里插入图片描述
  • 结论:
    1 类型检查确保一个表达式中的变量类型是合法的。在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。
    2 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。
    3 Python是一门动态的(dynamic)且强类型(strong)语言

http://chatgpt.dhexx.cn/article/mhkjH5sY.shtml

相关文章

Typescript笔记之基础知识(1):强类型语言和弱类型语言、静态语言和动态语言

foreword(前言) 这是本人关于Typescript的第一篇笔记,之所以选择将“强类型语言和弱类型语言、静态语言和动态语言”作为第一个想要去总结的主题,是因为个人觉得它很重要。 如今这个年代,可以供我们选择的编程语言非常…

编程语言的执行方式、静态语言和脚本语言

计算机执行源程序的两种方式是编译和解释 源代码:采用某种编程语言编写的计算机程序,人类可读 目标代码:计算机可以直接执行,大部分人类不可读,如:1110000111001010 编译 编译是讲源代码一次性转换为目标代…

程序的两种执行方式,静态语言和脚本语言

程序的两种执行方式,静态语言和脚本语言 文章目录 程序的两种执行方式,静态语言和脚本语言编译和解释静态语言和脚本语言 编译和解释 编译:将源代码一次性转换成目标代码的过程。(编译一次后,若需再次执行程序就可以直…

静态语言和脚本语言的区别

在计算机编程语言中,可以将编程语言分为静态语言和脚本语言两类,这两类编程语言最主要的区别是执行方式的不同。想要区分静态语言和脚本语言的区别,首先需要区分编译和解释。 编译和解释 编译是指将源代码一次性转换为目标代码的过程&#…

Java是动态语言还是静态语言,是强类型还是弱类型?

一. 前言 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。 二. 图释 小熙碰巧看到一张图,完美的区分了以上的问题&#xf…

高级数据结构—斐波那契堆与二项堆详细介绍

斐波那契堆与二项堆 二项堆请点击这里👈 数据结构与堆斐波那契堆概述结构实现符号定义插入结点合并抽取最小结点分析Decrease Key第一种情况 删除最大度数的界 二项堆请点击这里👈 数据结构与堆 下图列出了小顶堆在各种数据结构(链表、二叉堆、二项堆、…

数据结构——斐波那契堆

斐波那契堆的介绍 斐波那契堆(Fibonacci heap)是一种可合并堆,可用于实现合并优先队列。它比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。与二…

《算法导论3rd第十九章》斐波那契堆

前言 第六章堆排序使用了普通的二叉堆性质。其基本操作性能相当好,但union性能相当差。 对于一些图算法问题,EXTRACT-MIN 和DELETE操作次数远远小于DECREASE-KEY。因此有了斐波那契堆。 斐波那契堆结构 斐波那契堆是一系列具有最小堆序的有根树的集合…

斐波那契堆(Fibonacci heaps)

一:斐波那契堆 1:特性 斐波那契堆同二项堆一样,也是一种可合并堆。斐波那契堆的优势是:不涉及删除元素的操作仅需要O(1)的平摊运行时间(关于平摊分析的知识建议看《算法导论》第17章)。和二项…

3.3 斐波那契堆

结构 斐波那契堆的基础是可合并堆。 数据结构是一个森林。也就是N棵树。这点和二项堆一样。 这个结构没有二项堆那么多的要求。 Rank的概念,是子节点的数目 与二项堆不同的是,斐波那契堆的底层链表要成环,要双向链表。   而斐波那契堆的节点&#xff…

二叉堆/二项堆/斐波那契堆

二叉堆 二叉树 二叉树:是树的一种,主要的特点是二叉树的所有节点最多只有两个叶节点。除此之外没有别的要求完全二叉树:就是在二叉树当中,除了最后一层之外,所有层的节点都有满的,且最后一层的节点也是从…

斐波那契堆(Fibonacci heap)原理详解

前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合。它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间。堆的名字来源于斐波那契数,它常用于分析运行时间。 堆结构介绍 基本术语介绍: 关键字:堆节点储存的…

斐波那契堆 - 解析与实现

概要 本章介绍斐波那契堆。和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现。后续再分别给出C和Java版本的实现;实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可。若文章有…

算法导论 斐波那契堆

算法导论 斐波那契堆 定义 堆H 最小结点min:指向最小关键字key的根结点n表示当前堆中结点的个数 结点x 最小堆性质:每个结点的关键字key均大于等于父结点的关键字根链表:所有的根结点都通过left,right指针形成一个环形链表父类指针为p,左右兄…

斐波那契堆(Fibonacci heap)原理详解(附java代码实现)

前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合。它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间。堆的名字来源于斐波那契数,它常用于分析运行时间。 堆结构介绍 基本术语介绍: 关键字:堆节点储存的…

斐波那契堆

斐波那契堆 作者: 大树先生 博客: http://blog.csdn.net/koala_tree GitHub:https://github.com/koalatree 2017 年 09 月 13 日 自《算法导论》. 斐波那契堆有两种用途:第一种,支持一系列操作,这些操作…

斐波那契堆(Fibonacci Heap)

也许我们每个人都知道斐波那契数列(Fibonacci sequence)。即这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...,如果我们用伪代码比表示: int FibonacciSequence(int n){if (n 1 || n 2) {return 1;}return FibonacciSequence(n …

斐波那契堆(一)之 图文解析 和 C语言的实现

出自:http://www.cnblogs.com/skywang12345/p/3659060.html 斐波那契堆(一)之 图文解析 和 C语言的实现 概要 本章介绍斐波那契堆。和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现。后续再分别给出C和Java版本…

斐波那契堆的C++实现

本文改编自《算法导论》第三版第19章:斐波那契堆。文中代码为书中伪代码的C实现,如有疏漏还请指出。 1.斐波那契堆的结构 斐波那契堆是一种可并堆,它支持以下操作: ( 1 ) (1) (1)在 O ( 1 ) O(1) O(1)时间内插入元素、获取最小…

常见电子元器件检测方法。——Arvin

电子设备中使用着大量各种类型的电子元器件,设备发生故障大多是由于电子元器件失效或损坏引起的。因此怎么正确检测电子元器件就显得尤其重要,这也是电子维修人员必须掌握的技能。我在电器维修中积累了部分常见电子元器件检测经验和技巧,供大…