python与JavaScript异同
# Python 与 JavaScript 的异同
# 一、数据类型
python 和 js 都是动态数据类型
但是需要注意的是,python 连接时并不会自动转换类型。
str = '123' + 123
会直接报错
TypeError: cannot concatenate 'str' and 'int' objects
2
3
正确做法是手动转换类型后再连接
str = '123' + str(123)
JS的对象和python的字典dict基本等价
# 二、 声明变量
python初始化变量不需要关键字直接赋值即可如: n = 1
命名变量格式:
python: 使用 snake_case 命名样式, 下划线区分单词
JavaScript: 使用 snakeCase 驼峰命名样式, 首字母大写区分单词
# 二、python 用缩进来区分代码块
和 js 用{}区分作用域不同 python 用的是缩进(这个点 python 被吐槽麻了, 因为CV代码时,还得处理缩进)
# Python
def get_sum(num1, num2):
sum = 0
if (num1 > 0)
sum += num1
return sum + num2
2
3
4
5
6
如上:get_sum 函数和 if,都是用缩进来控制生效范围
# 三、高阶函数
python 和 js 都有 map、reduce、sort 等高级函数,且用法近似。 两者都有闭包且表现几乎一致,python 对闭包的依赖比 js 小一些
python 有个自己独特的东西-函数装饰器
和 js 类似,在 python 里由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
def now():
print('2021-12-30')
f = now
f()
2021-12-30
2
3
4
5
现在,假设我们要增强 now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改 now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
本质上,decorator 就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的 decorator,可以定义如下:
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
2
3
4
5
观察上面的 log,因为它是一个 decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助 Python 的@语法,把 decorator 置于函数的定义处:
@log
def now():
print('2021-12-30')
2
3
调用 now()函数,不仅会运行 now()函数本身,还会在运行 now()函数前打印一行日志:
now()
call now():
2021-12-30
把@log 放到 now()函数的定义处,相当于执行了语句:
now = log(now)
# 四、模块导入
JavaScript 模块必须显式导出。在 Python 中,所有模块均可导入。
JavaScript 具有默认导出的概念。Python 没有。
// javascript
import { myvar, myfunc } from './mymodule'
console.log(myvar)
myfunc()
// 分模块
import { myvar, myfunc } from './mymodule'
console.log(myvar)
myfunc()
2
3
4
5
6
7
8
9
# python
import mymodule
mymodule.myfunc()
# 分模块
from mymodule import myvar, myfunc
print myvar
myfunc()
2
3
4
5
6
7
8
9