作为一个标榜“程序员”而非“前端开发”的前端开发,不应该只会一门JavaScript
,但学习新语言累觉不爱。
能否将JavaScript
的经验借鉴到其他语言的学习上呢?毕竟它们都是“编程语言”,提取共同点,突出差异点,将新语言学习的成本降到最低。
总体来说,编程语言有几大核心
- 语法
- 数据类型
- 内置库
- 第三方库
- 工程相关(包/依赖、测试、构建)
当然有些语言有更多内容,而有些只有部分,这就要在学习的过程中不断补充完善。
所以,这系列博客,将从这几个核心依次介绍,最终实现能够阅读python
实际项目代码。
语句
python
没有命令结束标志,即不用分号结尾;javascript
以;
作为语句的结束标志也可以不加。
其实
JavaScript
会自动判断语句是否结束,比较经典的例子就是
1
2
3
4 function foo(params) {
return
params;
}
从语义上来说,是想返回params
,但其实在return
这行就结束了,最终函数返回undefiend
。
代码块
python
使用缩进来控制层级,或者说代码块,不过不同于JavaScript
可以随意得到一个块,python
只有三种情况才有代码块
- 在
for...in
循环 if
判断- 函数声明
下面会再介绍。
变量声明
1 | # python |
不需要关键字,对应JavaScript
代码则是:
1 | // javascript |
运算符
由于运算符很多,这里只挑一些特殊的介绍:
比较运算符
不同于JavaScript
有===
和==
的区别,python
只有==
,比较两个对象是否相等。
!=
和<>
表示相同含义,即不等于。
逻辑运算符
表示”并且“关系,使用and
,表示”或“使用or
,”非“使用not
。
对应JavaScript
则分别是&&
、||
和!
。
函数
函数声明
声明一个空函数,
1 | # python |
python
使用def
关键字表示声明一个函数,紧接着是函数名、括号、括号中的参数和冒号:
,下一行缩进,编写函数体。如果是空函数,则需要使用pass
作为函数体。
1 | // javascript |
函数调用
1 | # python |
即函数/方法后面接()
,参数置于括号内。
1 | // javascript |
参数
和JavaScript
一样,声明函数时指定参数的位置,调用时按照顺序传递实参即可。
1 | # python |
1 | // javascript |
默认参数
1 | # python |
1 | // javascript |
可变参数
如果参数个数不确定,怎么办?
1 | # python |
numbers
是一个列表(数组),保存了所有传入的参数。
1 | // javascript |
只是符号不同,args
也是数组。
关键字参数
1 | # python |
得到的kw
值是一个对象,键为参数名,值为对应的值。
JavaScript
中没有这个概念,也无法模拟,因为JavaScript
没有严格意义上的”命名参数“。这里是第一个python
的特殊点 [1]
命名参数
前面的例子:
1 | # python |
JavaScript
中虽然没有命名参数,但可以使用解构模拟:
1 | // javascript |
循环
python
中有两种循环,for...in
和while
。
for…in 循环
1 | # python |
对应的JavaScript
则是
1 | // javascript |
for 循环
但是for...of
在JavaScript
中是新特性啊,python
没有JavaScript
中常用的for
循环,不过可以使用for...in
实现类似的
1 | # python |
首先使用len()
函数获取ary
的长度,再使用range()
得到从 0 开始,ary
长度结束的数组,如range(5)
得到[0, 1, 2, 3, 4]
,再遍历该数组。
1 | // javascript |
一般用在需要使用下标的情况。
步长
那python
如何控制步长?
1 | # python |
步长则为2,本质上来说并不是步长为2,而是将遍历的数组间隔变为了2,还是以上面为例:range(0, 5, 2)
得到[0, 2, 4]
。
对应的javascript
实现:
1 | // javascript |
这么一比感觉
for
循环更灵活。
while 循环
1 | # python |
只要满足条件,就执行循环体。对应javascript
:
1 | // javascript |
条件判断
python
中只有if..else
,没有switch
。
1 | # python |
对应的JavaScript
则是:
1 | // javascript |
实践
有 29, 12, 49, 50, 9, 8 六个数字,要求对每个数字进行判断,
- 如果大于等于 50,则打印 max 字符串和该数字
- 如果大于等于 10 且小于 50,则打印 middle 字符串和该数字
- 否则打印 min 字符串和该数字
小提示:
python
中数组也可以直接使用字面量声明。
总结
这里只是列出了一部分,还有更多内容比如
- python 有变量提升吗?
- 函数参数是按值传递还是按引用传递?
之类,就自己探索吧!