前端的 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; // JavaScriptbig_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…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
