一天快速入门python_JSer 一天快速入门 Python

快速入门什么的真是一个嗖嗖的名字......因为最近工作与 Python 有关,于是决定快速入门下 Python,并试着将 Python 和 JavaScript 的一些区别进行总结。从昨天晚上开始,加上今天大半天,学习 API 文档,百度相关文章,码字总结(这个太耗时),可以算作刚好一整天。当然本文只涉及Python 初级部分,高级部分岂是一天能搞定的!

因个人水平有限,不免错误或不专业的地方,望读者指正,以便我及时更正本文。另外,本文将持续补全和丰富缺失的内容。

一、总览

语言总体都是相似的,但都有各的专攻领域。总体上讲,从涵盖的领域来看:

Python ≈ ECMAScript6 + NodeJS

这里 和 这里 分别写了它们的诞生记。虽然一个 Python (以下说的 Python 如未加版本号,均指 3.x 版本) 约等于两个庞大 JS 体系,但并不代表孰优孰劣,这里强调的是大体涵盖领域。只要知道 ECMAScript6 + NodeJS 它们俩共同完成的事,Python 可以一个人就办到。

解释器的概念

Python 和 JS 都是解释性语言,这和 JAVA 的 “不解释” 截然不同。

安装了 Python 后会自带一个 CPython 的解释器。命令行(CLI)中执行 Python 语句就会调用这个解释器来解释 Python 代码,解释完就执行。所以 Python 编程起步就得用命令行,或者另行配置 IDE (推荐 JSer 用 Sublime 作为入门工具足矣。这里是 配置教程)。

不过解释器的概念和 JS 是相似的。只不过 JS 几乎是隐藏了解释器的(它的解释器就配置在浏览器中,可以简单的理解,浏览器就是它的解释器,因为没人会追究这一司空见惯的事物)。所以 JS 编程起步,不用做这一步工作,只要一个浏览器(chrome,以下说浏览器,均指 chrome 浏览器)即可,可谓门槛会更低。

TODO: 尚缺一个表格将它们做个区别对比

交互式编程环境

Python 借助 CLI 就可以做到, 这点和 NodeJS 是非常相似的。

// 命令行输入 node, 开启 node 编程环境

E:\>node

>

// 命令行输入 node, 开启 node 编程环境

E:\>python

Python 3.6.0 (v3.6.0:41df79263a11)...

Type "help", "copyright", "credits" ...

>>>

JS 交互式编程环境就是浏览器,更简单方便,只要打开浏览器,并按快捷键 F12 就行。

书写风格差异

1、代码块的区别

Python 的代码块是通过缩进来实现的,不使用大括号 {} —— 这是 Python 和其他语言最大的区别。

Python 是 “行式” 语言,一行一行的写,像搬砖砌围墙一样一层一层的码。

# Python 风格

if True:

print "True"

else:

print "False"

一行一行的写,没了 {} 好像看起来真的简洁了许多。

2、以行为主

Python 写代码,如果本来是 2 行的语句,硬是要书写在同一行,请用;号隔开。

如果本是一行的语句,硬是要书写在 2行,请在行末加,号。

# 结果被打印在 2 行

x = 1

y = 2

print (x); print (y)

# 1

# 2

# 结果被打印在 1 行

x = 1

y = 2

print (x, y)

# 1 2

3、分号的区别

分号是可选的。Python 一行末尾总是可以忽略分号的,当然加上去也没问题。但是,如果多行语句想写在一行中,每条语句末尾加必须用 ; 号隔开,行末仍然可以不加 ; 号。

# 多行书写

if True :

name = 'a string'

print (name)

# 一行写完

if True : name = 'a string'; print (name)

4、注释的区别

Python 使用# 号单行注释,或者 ''' xxxx'''、"""xxxx""" 单、双三引号做多行注释。

name = 'jeremy' # 名称

'''

我是多行注释

我是多行注释

'''

二、语法差异

运算符

运算符的差异主要汇总于下,总体相似。但相比 Python 提供的更为丰富、易用,接近自然英语。

Python 运算符

JS 运算符

说明

**

ES6 加入

幂运算

//

Math.floor(/)

对商向下取整

and

&&

py 更接近自然语言

or

||

同上

not

!

同上

in

in

js仅用于数组、对象的成员判断 py除此还包括对字符串的测试

not in

-

js不提供该运算符 py同上

is

-

py 比较两个对象的存储单元是否相同

is not

-

同上

标准数据类型 VS 基本数据类型

Python 和 JS 都是弱类型语言,也称动态类型语言,即其类型可以通过再次赋值而改变,并不是一开始声明时就定死的。关于数据类型,Python 称为标准数据类型,对标 JS 的基本数据类型。

Python

JS

说明

数值 (Numbers)

数值 (Number)

如若改变py的数值类型的值,则需重新分配内存空间

字符串 (String)

字符串 (String)

-

列表 (List)

数组 (Array)

-

元组 (Tuple)

-

py的元组是不可变的,相当于是 readOnly

字典 (Dictionary)

对象 (Object)

相似程度最高

布尔值

布尔值

py的首字母大写True、False

空值(None)

undefined/ null

py创建了一个变量未赋值就给个 None 占位

字符串、数组、元组有一些基础简版的操作方法,如下标截取,加号拼接等。

数值

Python 所有的类型都是对象,变量一旦被声明,那么它将指向所赋的值的内存地址。 Python 数值是不可变类型,只要值改变,那么它将被分配一个新的内存地址。

数值类型被挂载了非常多常用数学函数,正如 ES6 给 Number 命名空间下添加了常用数学函数一样。

字符串

Python 3 版本中,字符串是以 Unicode 编码的。jS 字符串本身也是 Unicode 编码的。关于编码 这里 和 这里 讲的非常详细。

Python 和 JS 的字符串非常相似,它们都和各自的列表(即数组)有着相似的方法行为。它们都能用反斜杠 \ 对特殊字符进行转义。

Python 字符串不同的点主要列举 2 个。

""" 三引号:前面说到的注释,三引号用来做多行注释,但用在字符串身上时,它会原封不动的保留字符串中内部格式,这个和 JS 的反单引号是一个意思。

# python 多行注释

'''

here is example

我是多行注释

'''

# python 字符串变量

msg = '''

python

'''

in 成员判断符: JS 字符串则无此成员判断符。

isExit = 'p' in 'python'

# => True

除此之外,更多方法不同但是并不难掌握,故不在此一一列举。

列表(数组)

Python 对标准类型的操作有着非常丰富的方法。比较让人觉得有意思的,大概列举一些。

列表乘: [1, 3, 5] * 3

# py 列表 * 运算,像细胞分裂一样复制

('hi', 'py') * 2

# => ('hi', 'py', 'hi', 'py')

// JS 数组没有这个功能,但 ES6 字符串有类似的功能

'hi JS'.repeat(2)

// => 'hi JShi JS'

列表加: [1, 2] + [3, 4]

# py 列表 + 运算

[1, 2] + [3, 4]

# => [1, 2, 3, 4]

// JS 有类似实现,但没有这么简洁

[1, 2].concat([3, 4])

[..[1, 2], ...[3, 4]]

列表项删除: del arr[1]

Python 删除列表项,列表的 length 自然变短。JS 删除数组项,数组的 length 不变。

# py

arr = [1, 2, 3, 4]

# 删除列表第 1 项

del arr[0]

print (len(arr))

# => 3

// JS

let arr = [1, 2, 3, 4];

delete arr[0];

console.log(arr.length);

// => 4

元组(readOnly 列表)

元组项不可更改、删除。因为它就是一个只读的列表。类似这样的不可变的数据类型,是很多语言的都具有的一大特征。

tup = (1, 2, 3)

del tup[0]

# TypeError: 'tuple' object doesn't support item deletion

tup[0] = 0

# TypeError: 'tuple' object does not support item assignment

JS 也可以设定数据为不可变数据。除此外,还有专门的库(immutable.js)来做这件事。

// 定义属性时设置为不可写

let obj = {};

Object.defineProperty(obj, "prop", {

value: "test",

writable: false});

// 冰冻对象

Object.freeze(obj);

字典 vs 对象

Python 字典和 JS 对象比较,高度相似,是同一类事物不同叫法而已。

dict = {'Name': 'python', 'age': 28}

type (dict)

# =>

len (dict)

# => 2

数据类型转换

类型转化上,Python 提供的全是显式的方法调用进行类型转换,标准一致而明确,不像 ES5 那样隐藏了很多自动类型转换。

隐式转化自然也有很多好处,它省掉了手动调用方法转类型的麻烦,但是它们处理得非常参差不齐,这样带来很多辨识的负担。ES6 在这方面做出了改进,但仍难掩盖历史问题。

类型判断上,Python 和 JS 各有方法,比较相似。

# Py

arr = [];

type (arr)

# =>

isinstance (arr, list)

# => True

// JS

typeof (arr)

// => object

arr instanceof Array

// => true

函数

函数书写格式上很大不同。关键字、函数名、括号及参数、函数体、return语句,这些基本结构高级语言都是一样的,只是 Python 的函数书写格式迥异——如上文总结的那样,没有{}大括号,靠缩进一行一行的。试想,如果给它在()号后边加上一个{} 不也就是和 JavaScript 写法差不多了?!

def printme( str ):

"函数专属说明"

print (str)

return

基本语句差异

基本语句就是:if 条件语句,for 循环语句,while 循环语句。

它们和 JavaScript 唯一需要关注的差异,仍然是写法,写法,写法——重要的事说三遍~

// 条件语句写法

if n >= 0:

return n

else:

return -n

// for 循环写法

for val in [10, 11, 12]:

print(val)

它们的写法差异有章可循!显然,Python 的语句没有{} 大括号(除了字典,整块代码你是看不到 {} 的,不知道为啥 Python 这么讨厌{}),而是用一个 : 号,代替了 JavaScript 的 {}。

这几乎就是基本语句的全部差异。ES6 中用 {} 圈定范围,给作用域定界;Python 则是靠一个 : 号指示,配以解释器对缩进的解释,从而界定语句范围。

——Python 没有 ES6 所谓的 {} 作用域,全靠使用者的书写格式来解析语句范围,因为它知道,写代码总是要讲求格式的,为什么不要这一事实用到极致呢!

三、高级内容

模块

Python 模块化更合理,ES6 一方面已经实现了模块化,另一方面正在致力于推进相关 API 放置在合理的命名空间下的行动。在模块化上,Python 更胜一筹。

一些主要模块

时间模块:time 模块、calendar 模块

正则模块:re 模块

json 模块

xml 模块

Python 中,它们都是通过 import 关键字引入的,而 JS 则是很早就内置在全局对象下了,这就容易造成管理混乱。

文件系统

数据库

JavaScript 也有数据库,indexDB.相当于是浏览器内部实现,并提供一套 JS API 给 JS 使用。

NodeJS 使用数据库就和 Python 的比较接近。

多线程

Python 支持多线程。JavaScript 是单线程的。

CGI 编程

NodeJS 不在话下。

网络编程

NodeJS + Socket.io 模块

GUI 编程

JavaScript 可以借助 Electron 进行 GUI 编程。

SMTP

这个 NodeJS 可以干。JavaScript 干不了。

升级策略

最后不得不说,升级策略上,Python 和 JS 也有这很大的不同。Python 3 不考虑向下兼容,目的是不想在新版本编写时有太多的累赘,但这造成的麻烦非常多。ES6 则向下兼容,考虑广大群众及项目的感受,不过很多解释器(浏览器)没有跟上支持步伐,但这个有 babel 等编译工具也不再是问题。

总之,两种策略显然各有利弊,可谓编写者希望甩开膀子干事,众人觉得应文明、体面一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值