前端的 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…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
