本文翻譯自:Python for JavaScript Developers,做者:Mario Pabon。javascript
最近我加入了一家小創業公司 Underdog.io,在紐約。我發現這裏的後端項目使用了 python,一個我以前沒有怎麼接觸過的語言。html
雖然在這裏個人主要職責在 JavaScript 和 React 方面的工做。可是咱們是個小團隊,爲了能實現一個功能,我必須常常深刻研究多個項目。因此我必須很快熟悉 Python。java
但是我沒有找到適合那些已經寫過代碼的人看的 Python 教程。我已經懂得怎麼使用另外一門語言進行編程,我只須要知道 Python 的語法和編程模式就能夠了。python
這是我寫這篇博客的緣由。給那些想快速學習 Python 的 JavaScript 程序員提供簡單的說明,咱們再也不須要再學習申明變量是什麼意思,也不須要知道一個函數是作什麼的。程序員
這篇文章中的 Python 是 3.0.1 版本,其中的一些例子在舊版本的 Python 上可能會失效。編程
在 Python 中申明變量很是簡單,像 JavaScript 同樣,不須要在申明的時候指定變量類型。同時,你也不須要指定變量的做用域,就像使用 let 同樣。json
x = 5
複製代碼
你能夠經過從新賦值改變變量的類型。後端
x = 5 # x 是 Integer 類型的
x = 'Hewwo' # x 如今變成了 String 類型
複製代碼
不像 JavaScript,Python 中的變量永遠是塊級做用域。數組
在語法上,Python 比 JavaScript 更嚴格一點。在 Python 中,縮進差一個空格會讓你的代碼沒法運行。這是由於 Python 用縮進來表示代碼塊,而不是使用大括號來表示代碼塊。好比,在 JavaScript 中申明代碼塊和在 Python 中聲明代碼塊分別是這樣的:app
function exampleFunction () {
// 這是一個代碼塊
var a = 5;
}
{
// 這也是一個代碼塊
}
複製代碼
# 這是個有獨立做用域的代碼塊
def example_function():
# 這也是個有獨立做用域的代碼塊
x = 5
print(x)
複製代碼
若是 print(x)
這行多了一個或者多個空格,Python 的解釋器會拋出一個縮進錯誤(IndentationError),由於所遇的縮進創建了一個無效的代碼塊。
def example_function():
x = 5
# 縮進錯誤(IndentationError)
print(x)
複製代碼
若是這行少了一個或者多個空格,以下:
def example_function():
x = 5
print(x)
複製代碼
Python 解釋器會拋出下面的錯誤:
NameError: name 'x' is not defined
複製代碼
由於 print(x)
不在申明 x
的那個做用域中。
if...else
,while
,和 for
在 Python 中和在 JavaScript 中基本是同樣的:
if x > 2:
print('hai!')
elif x > 3:
print('bye!')
else:
print('hey now')
if not x:
print('x is falsy!')
複製代碼
while x > 0:
print('hey now')
複製代碼
for
循環像 JavaScript 中的 foreach
循環:
ex_list = [1, 2, 3]
for x in ex_list:
print(x)
複製代碼
Python 的變量類型很像 JavaScript,不像其餘語言,好比 Java 和 C# 那樣嚴格。
也就是說,變量有類型的區別,可是不須要像 Java 那樣靜態申明一個變量的類型。
下面簡單說下 Python 自帶的幾種變量類型。
和 JavaScript 不一樣,Python 有多種數字類型。
你能夠在 Python 中使用 JavaScript 中的那些運算符。除此以外,Python 還有指數運算符 **:
# a = 4
a = 2 ** 2
複製代碼
Python 的列表像 JavaScript 的數組。列表中能夠包含多種類型的數據。
[4, "2", [0, "zero"]]
複製代碼
從列表中取元素有下面幾種特殊的操做方法:
a_list = [1, 2, 3, 4, 5]
# 1, 2, 3
a_list[0:2]
# 4, 5
a_list[3:]
# 3, 4
a_list[2, -2]
複製代碼
還有內置的幾種好用的操做列表的方法:
# 3
len([1, 2, 3])
# 3, 2, 1
[1, 2, 3].reverse()
# 1, 2, 3
[1, 2].append(3)
複製代碼
你還能夠用 + 運算符拼接兩個列表:
# 1, 2, 3, 4
[1, 2] + [3, 4]
複製代碼
Python 中的字符串很像 JavaScript 中的字符串。它們都是不可變化的數據。均可以用訪問數組元素的方式來訪問字符串中的一個字符。
name = 'Mario'
# M
print(name[0])
# 不行,名字仍是 'Mario'
name[0] = 'W'
複製代碼
字典是有鍵值對關係的數據,像 JavaScript 中的對象同樣。事實上,字典能夠用 JSON 語法來申明:
# python 的字典
person = {
'name': 'Mario',
'age': 24
}
# Mario
print(person['name'])
複製代碼
有個很方便的方法能夠取字典中的某個鍵對應的值,而且在這個鍵不存在的狀況返回一個默認值:
# 由於 `gender` 不存在,因此會獲得 'non-binary'
person.get('gender', 'non-binary')
複製代碼
None
就是 JavaScript 中的 null
。表示沒有值,而且在 if 判斷中結果是 非真
。
x = None
if not x:
print('x is falsy!')
複製代碼
像 JavaScript 同樣,函數在 Python 中也是對象。因此你能夠在函數參數中傳遞函數,也能夠給函數添加一個屬性:
def func(a, fn):
print(a)
fn()
func.x = 'meep'
# 'meep'
print(func.x)
def another_func():
print('hey')
# 5
# 'hey'
func(5, another_func)
複製代碼
Python 中的模塊和 ES6 的模塊相似。
Python 中的一個模塊就是一個文件,文件中包含一些 Python 代碼。
# my_module.py
hey = 'heyyy'
def say_hey():
print(hey)
複製代碼
跟 JavaScript 不同的是,你不須要指定輸出什麼,默認地,會輸出全部變量。
你能夠導入一個模塊的全部內容:
# 從 another_module.py 文件導入 my_module.py
# 兩個文件在同一個目錄下
import my_module
# 進行操做
my_module.say_hey()
print(my_module.hey)
複製代碼
或者導入一個模塊的一些內容:
# another_module.py
from my_module import hey, say_hey
# 進行操做
say_hey()
print(hey)
複製代碼
你還能夠用 pip 安裝別人寫的模塊。pip 是 Python 的包管理工具。
pip install simplejson
複製代碼
Python 支持使用對象申明類和類繼承進行面向對象編程。而 JavaScript 只支持用原型鏈和原型鏈式的繼承。
# 定義類
class Animal:
# Animal 實例中都會共享的變量
default_age = 1
# 構造函數
def __init__(self, name):
# 定義一個對外能夠訪問的變量
self.name = name
# 能夠在變量名前加兩個下劃線(__)來定義內部私有變量
self.__age = default_age
# 公有方法
def get_age(self):
return self.__age
# 私有方法
def __meow():
print('meowwww')
# 用 `staticmethod` 裝飾器來申明一個靜態方法
@staticmethod
def moo():
print('moooo')
# 實例化一個 Animal 對象
animal = Animal()
# 訪問公有屬性和方法
print(animal.name)
print(animal.default_age)
print(animal.get_age())
# 訪問靜態方法
Animal.moo()
# 錯誤!!!! .__age 是私有的
print(animal.__age)
複製代碼
一個類能夠繼承別的類。
# 繼承 Animal 類
class Human(Animal):
def __init__(self, name, address):
# 必須調用基礎類的 __init__ 方法
super().__init__(name)
self.__address = address
def get_address(self):
return self.address
# 使用 Human 類
human = Human('Mario', '123 Jane Street, Brooklyn, NY 11211')
# Human 對象能夠訪問定義在 Animal 類中的方法
human.get_age()
human.get_address()
複製代碼
除了本文中介紹的這些知識,Python 還有不少其餘的知識點。我特別推薦你去看看 Python 官方文檔 Python docs。
記住,學習一門語言的最好的方式是去寫,去多寫。因此開始寫吧。