前端的 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…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

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进…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

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

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...