当前位置: 首页 > news >正文

前端的 Python 入门指南(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同

《前端的 Python 入门指南》系列文章:

  • (一):常用语法和关键字对比
  • (二):函数的定义、参数、作用域对比
  • (三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同
  • (四):参数传递方式对比 - 值与引用传递 vs 可变不可变数据
  • (五):面向对象特性之继承实现的方式对比 - 基于原型链和基于类各有什么优缺点
  • (六):调试方式和技巧对比
  • (七):异步场景的实现方案对比 - 内置+显示事件循环 + async+await

JavaScript 和 Python 都是动态类型的编程语言,之前简单介绍了下语法和关键字,以及如何定义函数,虽然可以使用函数式编程(函数也可以作为值),但它们还都有点“一切皆对象”的思想设计。对于熟悉前端开发的程序员来说,理解两者在数据类型上的实现方式和差异,是快速上手 Python 的关键。本篇文章将通过数据类型的对比,帮助你理清 JavaScript 和 Python 的相同点与不同点。

1. 数据类型的分类

JavaScript 的数据类型

JavaScript 的数据类型分为两类:

  1. 原始类型(Primitive Types)
    • undefined, null, boolean, number, bigint, string, symbol
  2. 引用类型(Reference Types)
    • Object(包括 ArrayFunctionDateRegExp 等)
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    # 复数

主要区别

  1. Python 的整数没有范围限制,而 JavaScript 的 number 类型可能出现精度丢失。
    console.log(9999999999999999);  // 输出 10000000000000000
    
  2. 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 中的布尔值只有两个:truefalse,并且有一组常见的“假值”:

  • false, 0, NaN, "" (空字符串), null, undefined
console.log(Boolean(0));  // false
console.log(Boolean("")); // false

Python

Python 中的布尔值是 TrueFalse,并且同样有“假值”:

  • False, 0, 0.0, "", [], {}, None
print(bool(0))   # False
print(bool(""))  # False

主要区别

  • Python 使用 TrueFalse,首字母大写。
  • 两者的“假值”定义接近,但 JavaScript 的 nullundefined 没有直接对应的 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 提供了更多内置方法(如 reversesort)。
  • 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"

主要区别

  1. Python 的字典支持更多类型的键,而 JavaScript 的对象键通常是字符串。
  2. 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. 总结

特性JavaScriptPython
数字类型number, BigIntint, float, complex
字符串不可变,支持模板字符串不可变,支持格式化字符串
布尔类型true, falseTrue, False
数组/列表Array,动态类型list,动态类型
字典/对象Object,键为字符串或符号dict,键可为任意不可变类型
集合Setset, 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…...

【金融贷后】贷后运营精细化管理

文章目录 一、贷后专业术语讲解① 什么是贷后&#xff0c;贷后部是干什么的&#xff1f;② 贷后部门常见组织架构&#xff1f;③ 贷后专业术语有哪些&#xff1f; 二、贷后常用作业手段介绍① 贷后产品形态介绍&#xff1f;② 催收常用的方法&#xff1f; 三、贷后策略岗位介绍…...

学习CSS第七天

学习文章目录 一.交集选择器 一.交集选择器 使用多个条件符合的元素&#xff0c;可提高区分的精准度 元素配合类名是使用场景最多的 &#xff08;元素必须是第一位&#xff0c;ID一般不写&#xff09; <!DOCTYPE html> <html lang"zh-CN"> <head>…...

Image Stitching using OpenCV

文章目录 简介图像拼接管道特征检测和提取特征检测特征提取 特征匹配强力匹配FLANN&#xff08;近似最近邻快速库&#xff09;匹配 单应性估计扭曲和混合结论 使用opencv进行图像拼接 原为url: https://medium.com/paulsonpremsingh7/image-stitching-using-opencv-a-step-by-s…...

CentOS7 安装Selenium(使用webdriver_manager自动安装ChromeDriver)

在 CentOS 7 上安装 Selenium 通常涉及几个步骤&#xff0c;包括安装 Python、安装 Selenium 库、安装 WebDriver 以及配置环境。以下是详细的步骤&#xff1a; 1. 安装 Python 和 pip 如果你的系统中还没有安装 Python 和 pip&#xff0c;可以使用以下命令进行安装&#xff…...

鸿蒙手机文件目录

最近在开发鸿蒙&#xff0c;想把文件从电脑上发送到鸿蒙上我的手机APP的根目录&#xff0c;但是试了几次目录都不对&#xff0c;最后终于找到了&#xff0c;在这里记录一下 鸿蒙手机路径: /storage/media/100/local/files/Docs 将文件从电脑发送到手机&#xff1a;hdc file s…...

泷羽Sec学习笔记-Bp中ip伪造、爬虫审计

ip伪造与爬虫审计 ip伪造 下载插件&#xff1a;burpFakeIP 地址&#xff1a;GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython&#xff1a;下载地址&#xff1a;Maven Central: org.python:jython-…...

电子电工一课一得

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

Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…...

配置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.进程创建 我们在之前的文章中介绍过进程创建的方法&#xff0c;可以通过系统调用接口fork来创建新的进程。 fork在创建完新的子进程之后&#xff0c;返回值是一个pid&#xff0c;对于父进程返回子进程的pid&#xff0c;对于子进程返回0。fork函数后父子进程共享代码&#xff…...

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

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

Kael‘thas Sunstrider Ashes of Al‘ar

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

CNCF云原生生态版图

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

渐冻症:真的无药可治?

“渐冻症”&#xff0c;这个令人闻之色变的疾病&#xff0c;仿佛是生命的冷酷冰封者。一提到渐冻症&#xff0c;很多人脑海中立刻浮现出绝望的画面&#xff0c;认为它无药可治。但事实真的如此吗&#xff1f; 渐冻症&#xff0c;医学上称为肌萎缩侧索硬化症&#xff0c;是一种渐…...

`pg_wal` 目录

在 PostgreSQL 中&#xff0c;自动清理 pg_wal 目录主要通过配置参数 min_wal_size、max_wal_size 和 wal_keep_size 来实现。以下是如何配置 PostgreSQL 以自动清理 WAL 文件的详细步骤和建议&#xff1a; 配置 min_wal_size 和 max_wal_size&#xff1a; min_wal_size&#x…...

【信息系统项目管理师】论文:论信息系统项目的整合管理

文章目录 正文一、制定项目章程二、指定项目管理计划三、指导与管理项目工作四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段 正文 根据省自然资源厅的总体部署&#xff0c;XX市决定于2023年8月开始全市不动产登记系统建设&#xff0c;要求在2024年8…...

MATLAB深度学习(七)——ResNet残差网络

一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在&#xff0c;每两个网络层之间加入一个残差连接&#xff0c;缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里&#xff0c;设想一个包含诺干层自网络&#xff0c;子网络的函数用H(x)来表示&#x…...

freeswitch(配置event_socket连接)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 如果想使用代码进行控制freeswitch添加账号、获取注册信息、强拆等,可以使用ESL控制vim autoload_configs/event_socket.conf.x…...

C++ SQLite轻量化数据库使用总结

官网下载&#xff1a;https://www.sqlite.org/download.html 示例1 #include <iostream> #include <sqlite3.h>int main() {sqlite3* db;char* zErrMsg 0;int rc;// 打开数据库连接&#xff08;如果数据库不存在&#xff0c;则会自动创建&#xff09;rc sqlite…...

docker打包当前使用的某个容器为镜像,导出,导入

容器打包成镜像 要将正在使用的 Docker 容器打包成镜像&#xff0c;你可以使用 docker commit 命令。这个命令会从运行中的容器创建一个新的镜像。以下是详细步骤&#xff1a; 查看正在运行的容器&#xff1a; 使用以下命令查看当前正在运行的容器&#xff1a; docker ps找到目…...

【刷题22】BFS解决最短路问题

目录 一、边权为1的最短路问题二、迷宫中离入口最近的出口三、最小基因变化四、单词接龙五、为高尔夫比赛砍树 一、边权为1的最短路问题 如图&#xff1a;从A到I&#xff0c;怎样走路径最短 一个队列一个哈希表队列&#xff1a;一层一层递进&#xff0c;直到目的地为止哈希表&…...

服务器重启:数字世界的短暂休憩与新生

在互联网的浩瀚海洋中&#xff0c;服务器犹如一座座灯塔&#xff0c;持续稳定地散发着光芒&#xff0c;为无数的网络活动提供着支撑与指引。而服务器重启&#xff0c;便是这数字灯塔周期性进行自我调整与修复的关键环节。 服务器重启是指对服务器进行重新启动的过程&#xff0…...

JavaEE 【知识改变命运】05 多线程(4)

文章目录 单例模式什么是单例模式饿汉模式懒汉模式多线程- 懒汉模式分析多线程问题第一种添加sychronized的方式第二种添加sychronized的方式改进第二种添加sychronized的方式&#xff08;DCL检查锁&#xff09; 阻塞队列什么是阻塞队列什么是消费生产者模型标准库中的阻塞队列…...

【CSS in Depth 2 精译_076】12.4 @font-face 的工作原理

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

SQL Having用法

拿个业务场景说这个案例&#xff0c;比如我们有个表里面可能有批改过的数据&#xff0c;批改过得数据不会随着新批改的数据覆盖&#xff0c;而是逐条插入表中&#xff0c;如果想找出包含最早批改的数据和最新批改数据的话&#xff0c;那么我们就需要用到了havinng 用法,假设最开…...

可视化建网站/市场推广方案

现在网上一查出现安全模式的连接&#xff0c;基本都是要关闭服务端的操作&#xff0c;其实这种方式是不正确的&#xff0c;最有效的解决方式是使用stunnel进行安全模式的连接。 我碰到的问题是微软云&#xff08;其实我不想用&#xff01;&#xff09;连接Redis&#xff0c;默认…...

一个人做网站好累/个人怎么做互联网推广平台

编程的人是幸福的。 常常听到有人说&#xff0c; 编程的人是苦逼的&#xff0c; 其实仔细想想&#xff0c; 并不如此。 编程有碍于找 MM &#xff1f; 如果是这样&#xff0c; 为什么有的人凭借装机技能可以获得MM的青睐呢&#xff1f; 有的人能够靠写简单的C语言作业找到GF呢&…...

南京市建设厅网站/宁波seo快速排名

Reachability是苹果官方给的检查网络状态的库,想必每个基于网络的应用都会用它来检查网络状态吧,当然笔者也不例外.可是正当自信满满的我&#xff0c;用这个库用的不亦乐乎的时候,突然发现我写的基于网络的程序工作的不是那么流畅了,尤其是仔细检查以后确定是因为用了Reachabil…...

网站备案 论坛/百度云服务器官网

root-tools 项目地址&#xff1a;root-toolsRootToolsNeo 正式发布啦~ RootTools 是一款专注于给 root 后的用户提供方便的软件。主要提供&#xff1a; 应用冻结 不删除系统内的应用&#xff0c;而是将其冻结&#xff0c;在需要时可以解冻&#xff0c;但是别乱来哦&#xff0c;…...

用wordpress制作网站模板下载/培训课程

1、Android系统默认支持三种字体&#xff0c;分别为&#xff1a;“sans”, “serif”, “monospace 2、在Android中可以引入其他字体 。 <?xml version"1.0" encoding"utf-8"?> <TableLayout xmlns:Android"http://schemas.android.com/…...

joomla 网站建设教程/代运营公司哪家好一些

11.25事物隔离级别事物日志redo undo事物锁 begin; update事物日志性能优化 innodb_flush_log_at_trx_commit0|1|2|3innodb事务日志相关配置&#xff1b; show variables like %innodb_log%;通用日志通用日志&#xff1a;记录对数据库的通用操作&#xff0c;包括错误的SQL语句通…...