前端的 Python 入门指南(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同
《前端的 Python 入门指南》系列文章:
- (一):常用语法和关键字对比
- (二):函数的定义、参数、作用域对比
- (三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同
- (四):参数传递方式对比 - 值与引用传递 vs 可变不可变数据
- (五):面向对象特性之继承实现的方式对比 - 基于原型链和基于类各有什么优缺点
- (六):调试方式和技巧对比
- (七):异步场景的实现方案对比 - 内置+显示事件循环 + async+await
JavaScript 和 Python 都是动态类型的编程语言,之前简单介绍了下语法和关键字,以及如何定义函数,虽然可以使用函数式编程(函数也可以作为值),但它们还都有点“一切皆对象”的思想设计。对于熟悉前端开发的程序员来说,理解两者在数据类型上的实现方式和差异,是快速上手 Python 的关键。本篇文章将通过数据类型的对比,帮助你理清 JavaScript 和 Python 的相同点与不同点。
1. 数据类型的分类
JavaScript 的数据类型
JavaScript 的数据类型分为两类:
- 原始类型(Primitive Types):
undefined
,null
,boolean
,number
,bigint
,string
,symbol
- 引用类型(Reference Types):
Object
(包括Array
、Function
、Date
、RegExp
等)
let num = 42; // 原始类型
let obj = { key: "value" };// 引用类型
Python 的数据类型
Python 没有明确的“原始类型”和“引用类型”的区分,因为 所有数据类型都是对象。Python 提供了一组常见的内置数据类型:
- 数字类型:
int
,float
,complex
- 布尔类型:
bool
- 序列类型:
list
,tuple
,range
- 文本类型:
str
- 集合类型:
set
,frozenset
- 映射类型:
dict
- 特殊类型:
NoneType
num = 42 # 数字类型
obj = {"key": "value"} # 字典(映射类型)
主要区别:
- JavaScript 将数据分为“原始类型”和“引用类型”,只有引用类型是对象。
- Python 中 所有类型都是对象,包括整数、布尔值和
None
。
2. 数字类型的实现
JavaScript
JavaScript 的数字类型主要是 number
,它使用 64 位浮点数表示整数和小数。BigInt
提供对任意大小整数的支持。
let intNum = 42; // 整数
let floatNum = 3.14; // 浮点数
let bigIntNum = 123n; // BigInt
Python
Python 的数字类型更加多样化:
- 整数类型(int):支持任意大小的整数。
- 浮点数类型(float):64 位双精度浮点数。
- 复数类型(complex):支持复数计算。
int_num = 42 # 整数
float_num = 3.14 # 浮点数
complex_num = 1 + 2j # 复数
主要区别:
- Python 的整数没有范围限制,而 JavaScript 的
number
类型可能出现精度丢失。console.log(9999999999999999); // 输出 10000000000000000
- JavaScript 的
BigInt
和 Python 的int
都支持大整数,但语法略有不同。let bigInt = 123456789012345678901234567890n; // JavaScript
big_int = 123456789012345678901234567890 # Python
3. 字符串类型
JavaScript
JavaScript 的字符串是不可变的,可以通过双引号、单引号或模板字符串定义。
let str1 = "Hello";
let str2 = 'World';
let str3 = `${str1}, ${str2}!`; // 模板字符串
Python
Python 的字符串同样是不可变的,定义方式包括单引号、双引号和三引号(支持多行)。
str1 = "Hello"
str2 = 'World'
str3 = f"{str1}, {str2}!" # 格式化字符串
主要区别:
- 两者的字符串本质上都不可变,Python 提供了
f"{}"
格式化字符串,与 JavaScript 的模板字符串类似。 - Python 使用三引号支持多行字符串:
multi_line = """This is a multi-line string."""
4. 布尔类型
JavaScript
JavaScript 中的布尔值只有两个:true
和 false
,并且有一组常见的“假值”:
false
,0
,NaN
,""
(空字符串),null
,undefined
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
Python
Python 中的布尔值是 True
和 False
,并且同样有“假值”:
False
,0
,0.0
,""
,[]
,{}
,None
print(bool(0)) # False
print(bool("")) # False
主要区别:
- Python 使用
True
和False
,首字母大写。 - 两者的“假值”定义接近,但 JavaScript 的
null
和undefined
没有直接对应的 Python 类型(它们相当于 Python 的None
)。
5. 列表和数组
JavaScript
JavaScript 的数组是动态的,可以存储任何类型的值。
let arr = [1, "hello", true];
arr.push(4); // 添加元素
console.log(arr); // [1, "hello", true, 4]
Python
Python 使用 list
表示动态数组,也支持存储不同类型的元素。
arr = [1, "hello", True]
arr.append(4) # 添加元素
print(arr) # [1, "hello", True, 4]
主要区别:
- 两者的数组操作非常相似,但 Python 的
list
提供了更多内置方法(如reverse
、sort
)。 - JavaScript 使用
Array
提供动态数组功能,而 Python 的list
是内置类型。
6. 字典和对象
JavaScript
JavaScript 使用对象(Object
)存储键值对,键必须是字符串或符号。
let obj = { key: "value" };
console.log(obj.key); // "value"
Python
Python 使用 dict
存储键值对,键可以是任意不可变类型(如字符串、数字、元组)。
obj = {"key": "value"}
print(obj["key"]) # "value"
主要区别:
- Python 的字典支持更多类型的键,而 JavaScript 的对象键通常是字符串。
- Python 提供了
collections.defaultdict
等高级功能,而 JavaScript 可以通过Map
提供更灵活的键值存储。
7. 集合
JavaScript
JavaScript 的集合通过 Set
实现,集合中的元素是唯一的。
let set = new Set([1, 2, 2, 3]);
console.log(set); // Set {1, 2, 3}
Python
Python 使用 set
表示集合,同样保证元素唯一性。
set_obj = set([1, 2, 2, 3])
print(set_obj) # {1, 2, 3}
主要区别:
- 两者的集合操作类似,但 Python 提供了更多数学集合操作(如
union
,intersection
)。
8. 特殊值
JavaScript
null
:表示空值。undefined
:表示未定义的值。
Python
None
:表示空值。- Python 没有
undefined
,未定义变量会抛出NameError
。
let x = null; // 空值
let y; // undefined
x = None # 空值
9. 总结
特性 | JavaScript | Python |
---|---|---|
数字类型 | number , BigInt | int , float , complex |
字符串 | 不可变,支持模板字符串 | 不可变,支持格式化字符串 |
布尔类型 | true , false | True , False |
数组/列表 | Array ,动态类型 | list ,动态类型 |
字典/对象 | Object ,键为字符串或符号 | dict ,键可为任意不可变类型 |
集合 | Set | set , frozenset |
相关文章:
前端的 Python 入门指南(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同
《前端的 Python 入门指南》系列文章: (一):常用语法和关键字对比(二):函数的定义、参数、作用域对比(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异…...
Axios结合Typescript 二次封装完整详细场景使用案例
Axios 是一个基于 promise 的 HTTP 客户端,用于浏览器和 node.js。二次封装 Axios 主要是为了统一管理 HTTP 请求,例如设置统一的请求前缀、头部、超时时间,统一处理请求和响应的格式,以及错误处理等。 以下是一个使用 TypeScrip…...

基于Kubesphere实现微服务的CI/CD——部署微服务项目(三)
目录 一、kubesphere安装 1、安装本地持久存储 1.1、default-storage-class.yaml 1.2、 openebs-operator.yaml 1.3、安装 Default StorageClass 2、安装kubesphere 2.1、安装Helm 2.2、安装kubesphere 二、配置kubesphere 1、安装插件 2、创建devops项目 3、配置…...
【使用webrtc-streamer解析rtsp视频流】
webrtc-streamer WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或&a…...

element左侧导航栏
由element组件搭建的左侧导航栏 预览: html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>首页</title><style> /*<!-- 调整页面背景颜色-->*/body{background-colo…...

【金融贷后】贷后运营精细化管理
文章目录 一、贷后专业术语讲解① 什么是贷后,贷后部是干什么的?② 贷后部门常见组织架构?③ 贷后专业术语有哪些? 二、贷后常用作业手段介绍① 贷后产品形态介绍?② 催收常用的方法? 三、贷后策略岗位介绍…...
学习CSS第七天
学习文章目录 一.交集选择器 一.交集选择器 使用多个条件符合的元素,可提高区分的精准度 元素配合类名是使用场景最多的 (元素必须是第一位,ID一般不写) <!DOCTYPE html> <html lang"zh-CN"> <head>…...
Image Stitching using OpenCV
文章目录 简介图像拼接管道特征检测和提取特征检测特征提取 特征匹配强力匹配FLANN(近似最近邻快速库)匹配 单应性估计扭曲和混合结论 使用opencv进行图像拼接 原为url: https://medium.com/paulsonpremsingh7/image-stitching-using-opencv-a-step-by-s…...
CentOS7 安装Selenium(使用webdriver_manager自动安装ChromeDriver)
在 CentOS 7 上安装 Selenium 通常涉及几个步骤,包括安装 Python、安装 Selenium 库、安装 WebDriver 以及配置环境。以下是详细的步骤: 1. 安装 Python 和 pip 如果你的系统中还没有安装 Python 和 pip,可以使用以下命令进行安装ÿ…...
鸿蒙手机文件目录
最近在开发鸿蒙,想把文件从电脑上发送到鸿蒙上我的手机APP的根目录,但是试了几次目录都不对,最后终于找到了,在这里记录一下 鸿蒙手机路径: /storage/media/100/local/files/Docs 将文件从电脑发送到手机:hdc file s…...

泷羽Sec学习笔记-Bp中ip伪造、爬虫审计
ip伪造与爬虫审计 ip伪造 下载插件:burpFakeIP 地址:GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython:下载地址:Maven Central: org.python:jython-…...

电子电工一课一得
首语 在现代社会中,电子电工技术已经渗透到我们生活的方方面面,从家用电器到工业自动化,从通信设备到智能系统,无一不依赖于电子电工技术。因此,掌握电子电工的基础知识,不仅对理工科学生至关重要…...

Cesium 限制相机倾斜角(pitch)滑动范围
1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…...
配置ssh-key连接github
GitHub 通过在 2022 年 3 月 15 日删除旧的、不安全的密钥类型来提高安全性。 具体内容参考如下链接 https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent mac配置 ssh-keygen -t ed25519 -C …...

Linux——进程控制模拟shell
1.进程创建 我们在之前的文章中介绍过进程创建的方法,可以通过系统调用接口fork来创建新的进程。 fork在创建完新的子进程之后,返回值是一个pid,对于父进程返回子进程的pid,对于子进程返回0。fork函数后父子进程共享代码ÿ…...

【HarmonyOS】鸿蒙应用实现手机摇一摇功能
【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下…...

Kael‘thas Sunstrider Ashes of Al‘ar
Kaelthas Sunstrider 凯尔萨斯逐日者 <血精灵之王> Kaelthas Sunstrider - NPC - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Ashes of Alar 奥的灰烬 (凤凰 310%速度) Ashes of Alar - Item - 魔兽世界怀旧服TBC数据…...

CNCF云原生生态版图
CNCF云原生生态版图 概述什么是云原生生态版图如何使用生态版图 项目和产品(Projects and products)会员(Members)认证合作伙伴与提供商(Certified partners and providers)无服务(Serverless&a…...

渐冻症:真的无药可治?
“渐冻症”,这个令人闻之色变的疾病,仿佛是生命的冷酷冰封者。一提到渐冻症,很多人脑海中立刻浮现出绝望的画面,认为它无药可治。但事实真的如此吗? 渐冻症,医学上称为肌萎缩侧索硬化症,是一种渐…...
`pg_wal` 目录
在 PostgreSQL 中,自动清理 pg_wal 目录主要通过配置参数 min_wal_size、max_wal_size 和 wal_keep_size 来实现。以下是如何配置 PostgreSQL 以自动清理 WAL 文件的详细步骤和建议: 配置 min_wal_size 和 max_wal_size: min_wal_size&#x…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...