引言
去年国庆开始,接触到PyQt项目,学习了Python3的API语法,涉及到一些处理数据的基本操作,以之前学习JavaScript的思维方式,来实现这些API效果。
JavaScript的数组=>近似于Python的列表,JavaScript的对象=>近似于Python的字典
①Python列表切片
列表切片方法
lst = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
print(lst[0:3:2]) # ['鼠', '虎']
print(lst[2:12:4]) # ['虎', '马', '狗']
JavaScript实现方法
const list = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"];
const log = console.log;
let pyList = (arr, start, stop, step) => {
let res = [];
if (stop > arr.length) throw new Error("已超出范围");
for (let i = start; i < stop; i += step) {
res.push(arr[i]);
}
return res;
};
/*方法2*/
let pyList2 = (arr, start, stop, step) => {
let res = [];
if (stop > arr.length) throw new Error("已超出范围");
//len为res数组的长度
let len = Math.ceil((stop - start) / step);
for (let i = 0; i < len; i++) {
res.push(arr[start + step * i]);
}
return res;
};
log(pyList(list, 0, 3, 2));
log(pyList2(list, 2, 12, 4));
②Python生成随机列表
random.sample 无放回抽样
import random
# 列表中包含0~9的整数
lst2 = random.sample([_ for _ in range(0, 10)], 10)
print(lst2) # [3, 8, 2, 0, 5, 9, 1, 6, 4, 7]
JavaScript实现方法
let randSp = [];
do {
let ranNum = parseInt(Math.random() * 10);
if (randSp.indexOf(ranNum) === -1) randSp.push(ranNum);
} while (randSp.length < 10);
console.log(randSp); // [7, 2, 5, 4, 9, 8, 6, 0, 1, 3];
random.choices 有放回抽样
lst3 = random.choices([_ for _ in range(0, 10)], k=10)
print(lst3) # [1, 6, 7, 5, 8, 8, 1, 1, 2, 2]
JavaScript实现方法
let randSp = [];
do {
let ranNum = parseInt(Math.random() * 10);
randSp.push(ranNum);
} while (randSp.length < 10);
console.log(randSp); // [6, 4, 4, 4, 9, 6, 0, 4, 7, 1];
③JavaScript的arguments和剩余参数
function my_var_func(a, ...lst) {
console.log(arguments.length, Array.from(arguments));
console.log(lst, Array.isArray(lst));
console.log(arguments, Array.isArray(arguments));
for (const value of arguments) {
console.log(value);
}
}
my_var_func(10, 20, 30, 40);
近似于Python定义函数的 * 收集参数(元组)
def my_var_func(*args):
print('The number of args is', len(args))
for ele in args:
print(ele)
my_var_func(10, 20, 30, 40)
④Python生成固定长度列表
scores = [[0]*3 for _ in range(5)]
scores[0][0] = 1
print(scores)
JavaScript实现方法
let lst = Array.from({ length: 5 }).map((_) => Array(3).fill(0));
lst[0][0] = 1;
console.log(lst);
⑤JavaScript实现10!的阶乘
let sum = 1;
用for循环
for (let i = 2; i <= 10; i++) {
sum *= i;
}
console.log(sum); // 3628800
或者while循环
i = 1;
while (i < 10) {
i++;
sum *= i;
}
console.log(sum);
或者用ES6方法
let res = Array(10).fill().map((_, i) => i + 1).reduce((acc, cur) => ((acc *= cur), acc), 1);
Python导入functools模块的reduce方法和operator基本运算符函数
import operator
import functools
def fac(num): return functools.reduce(operator.mul, range(1, num+1), 1)
print(fac(10))
⑥其余 JavaScript的API 同 Python的API
JavaScript数组 => Python列表
/*
JavaScript数组 => Python列表
splice(index, 0, ele) 同 insert,但insert只能插入一个元素
push 同 append,但append只能末尾添加一个元素
push展开符 同 extend,可迭代
splice(index, 1) 同 pop(index)
splice(0, arr.length) 同 clear()
Python的del方法 删除列表,列表名未定义
sorted(list) 不改变原列表
sort()函数 改变原列表
reverse=True 指定降序
*/
JavaScript对象 => Python字典
/*
Object.assign(dict1, dict2)对象浅拷贝 同 字典dict1.update(dict2)
Object.entries(dict2)对象键值对生成二维数组 同 dict2.items()
*/
xxx.js文件
let dict2 = { a: 1, b: 2, c: 3 };
console.log(Object.entries(dict2));
for (const [k, v] of Object.entries(dict2)) {
console.log(k, v);
}
xxx.py文件
dict2 = {'a': 1, 'b': 2, 'c': 3}
for k, v in dict2.items():
print(k, v)
Python固然简洁,但不建议无脑学,不求甚解,拿来主义要不得,诸如Python少儿编程这类,更不必以此圈钱,不如多培养些奥数人才
作为解释型语言,编译过程较慢,码农在开发过程中,应发挥主观能动性,优化代码结构