Python 和 JavaScript 中的等效方法。第一部分
尽管Python和JavaScript是完全不同的语言,但是全栈Python开发人员在开发 Web 项目时应该了解一些类似之处。在这个由 4 个部分组成的系列中,我将探讨每种语言的相似之处以及解决常见问题的常用方法。这并非旨在作为参考,我将跳过原始变量类型、条件和循环等基础知识。但我会深入研究使用Python和JavaScript 的更复杂的结构和数据操作。此外,我将尝试关注实际用例。对于想要掌握传统和现代原生JavaScript的 Django、Flask 或其他Python框架的开发人员来说,这个系列应该会很有趣。另一方面,它对于想要更好地了解后端如何工作甚至可能创建自己的 Django 网站的前端开发人员很有用。
解析整数
我们将从整数解析开始。
在Python中这很简单:
number = int(text)
但是在JavaScript中,你必须解释你期望的数字系统:十进制、八进制、十六进制还是二进制:
number = parseInt(text, 10);
为了使用“常规”十进制数系统,我们将数字 10 作为parseInt()
函数的第二个参数传递。8 表示八进制,16 表示十六进制,2 表示二进制。如果缺少第二个参数,文本中的数字将从零开始,并且您使用的浏览器版本稍低,则文本中的数字将被解释为八进制。例如,
parseInt('012') == 10 // in some older browsers
parseInt('012', 10) == 12
这确实会搞乱你的计算。
条件赋值
对于条件赋值,Python和JavaScript 的语法有所不同,但条件赋值在这两种语言中都很流行。它之所以流行,是因为它只需要一个语句就能进行条件检查、判断真假。
从Python 2.7 开始,您可以像这样编写条件赋值:
value = 'ADULT' if age >= 18 else 'CHILD'
在JavaScript中,条件赋值是使用三元运算符完成的?:
,类似于 C、C++、C#、Java、Ruby、PHP、Perl、Swift 和 ActionScript 中的赋值:
value = age >= 18? 'ADULT': 'CHILD';
根据属性名称指定对象属性值
访问对象属性的正常方法是通过Python和JavaScript中的点符号:
obj.color = 'YELLOW'
但是,如果您想通过保存为字符串的名称来引用属性,该怎么办?例如,属性名称可能来自属性列表,或者属性名称由两个字符串组合而成,例如'title_' + lang_code
。
因此,在Python中,有函数getattr()
和setattr()
。我经常使用它们。
attribute = 'color'
value = getattr(obj, attribute, 'GREEN')
setattr(obj, attribute, value)
在JavaScript中,您可以将对象视为字典,并将属性名称传递到方括号中:
attribute = 'color';
value = obj[attribute] || 'GREEN';
obj[attribute] = value;
在Python中,当对象没有属性时,需要获取默认值,getattr()
需要使用第三个参数。在JavaScript中,如果obj
属性不存在,则返回该undefined
值。然后,可以将其与要分配的默认值进行“或”运算。这是JavaScript中的常见做法,在许多JavaScript库和框架中都可以找到。
按键的字典值
这与上一个类似。在两种语言中,按键赋值字典的常规方法是使用方括号:
dictionary = {}
dictionary['color'] = 'YELLOW'
在Python中,可以使用方括号读取值,但如果键不存在,则使用 会失败KeyError
。更灵活的方法是使用返回不存在键的get()
方法。此外,您还可以传递可选的默认值作为第二个参数:None
key = 'color'
value = dictionary.get(key, 'GREEN')
在JavaScript中,您可以使用与对象属性相同的技巧,因为字典和对象在那里是相同的:
key = 'color';
value = dictionary[key] || 'GREEN';
切片列表和字符串
Python有切片[:]
运算符来获取列表、元组和类似的更复杂结构的部分,例如 Django QuerySets:
items = [1, 2, 3, 4, 5]
first_two = items[:2] # [1, 2]
last_two = items[-2:] # [4, 5]
middle_three = items[1:4] # [2, 3, 4]
在JavaScript中数组有slice()
同样效果、用法类似的方法:
items = [1, 2, 3, 4, 5];
first_two = items.slice(0, 2); // [1, 2]
last_two = items.slice(-2); // [4, 5]
middle_three = items.slice(1, 4); // [2, 3, 4]
但不要将其与splice()
修改原始数组的方法混淆!
Python[:]
中的切片运算符也适用于字符串:
text = 'ABCDE'
first_two = text[:2] # 'AB'
last_two = text[-2:] # 'DE'
middle_three = text[1:4] # 'BCD'
在JavaScript中,字符串就像数组一样具有以下slice()
方法:
text = 'ABCDE';
first_two = text.slice(0, 2); // 'AB'
last_two = text.slice(-2); // 'DE'
middle_three = text.slice(1, 4); // 'BCD'
列表项的操作
在编程中,收集和分析元素序列非常常见。在Python中,这通常使用列表来完成,而在JavaScript中则使用数组。它们具有相似的语法和操作,但用于添加和删除值的方法名称不同。
这是在 Python 中如何连接两个列表、在末尾添加一个值、在开头添加一个值、从开头获取和删除一个值、从末尾获取和删除一个值以及按索引删除某个值:
items1 = ['A']
items2 = ['B']
items = items1 + items2 # items == ['A', 'B']
items.append('C') # ['A', 'B', 'C']
items.insert(0, 'D') # ['D', 'A', 'B', 'C']
first = items.pop(0) # ['A', 'B', 'C']
last = items.pop() # ['A', 'B']
items.delete(0) # ['B']
以下是在JavaScript中对数组执行完全相同操作的方法:
items1 = ['A'];
items2 = ['B'];
items = items1.concat(items2); // items === ['A', 'B']
items.push('C'); // ['A', 'B', 'C']
items.unshift('D'); // ['D', 'A', 'B', 'C']
first = items.shift(); // ['A', 'B', 'C']
last = items.pop(); // ['A', 'B']
items.splice(0, 1); // ['B']
连接字符串列表
在获得字符串列表或数组后,使用逗号或换行符等分隔符将它们组合成一个字符串是很常见的。
在Python中,这是通过join()
传递列表或元组的字符串方法来实现的。虽然感觉可能不太自然,但你还是从分隔符开始吧。不过我保证,用几次之后你就会习惯的。
items = ['A', 'B', 'C']
text = ', '.join(items) # 'A, B, C'
在JavaScript中,数组具有join()
传递分隔符的方法:
items = ['A', 'B', 'C'];
text = items.join(', '); // 'A, B, C'
总结
- Python中的列表和元组类似于JavaScript中的数组。
- Python中的字典类似于JavaScript中的对象。
- Python中的字符串与JavaScript中的字符串类似。
- JavaScript中的数字应谨慎解析。
- 两种语言中都存在单行条件赋值。
- 在Python中连接字符串序列可能会令人困惑,但您很快就能习惯它。
我整理了一份Python和JavaScript等价语言的完整列表,方便打印出来随时使用。它并排比较了传统的Python 2.7 和基于 ECMAScript 5 标准的JavaScript,以及较新的Python 3.6 和基于 ECMAScript 6 标准的JavaScript,并比较了它们各自的优势,例如字符串插值、lambda、生成器、类等等。
的终极备忘单 ✨✨✨
在本系列的下一篇中,我们将探讨 JSON 的创建和解析、正则表达式的操作以及错误处理。敬请期待!
封面照片由Benjamin Hung拍摄。
鏂囩珷鏉ユ簮锛�https://dev.to/djangotricks/equivalents-in-python-and-javascript-part-1-3317