面向 JavaScript 程序員的 Python 教程

本文翻譯自:Python for JavaScript Developers,做者:Mario Pabonjavascript

最近我加入了一家小創業公司 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

JavaScript 中的代碼塊

function exampleFunction () {
  // 這是一個代碼塊
  var a = 5;
}

{
  // 這也是一個代碼塊
}
複製代碼

Python 中的代碼塊

# 這是個有獨立做用域的代碼塊

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...elsewhile,和 for 在 Python 中和在 JavaScript 中基本是同樣的:

if...else

if x > 2:
  print('hai!')
elif x > 3:
  print('bye!')
else:
  print('hey now')

if not x:
  print('x is falsy!')
複製代碼

while 循環

while x > 0:
  print('hey now')
複製代碼

for 循環

for 循環像 JavaScript 中的 foreach 循環:

ex_list = [1, 2, 3]

for x in ex_list:
  print(x)
複製代碼

變量類型

Python 的變量類型很像 JavaScript,不像其餘語言,好比 Java 和 C# 那樣嚴格。

也就是說,變量有類型的區別,可是不須要像 Java 那樣靜態申明一個變量的類型。

下面簡單說下 Python 自帶的幾種變量類型。

Numbers

和 JavaScript 不一樣,Python 有多種數字類型。

  • 整型(Integers):1, 2, 3
  • 浮點(Floats):4.20, 4e420
  • 複數(Complex numbers):4 + 20j
  • 布爾(Booleans):True, False

你能夠在 Python 中使用 JavaScript 中的那些運算符。除此以外,Python 還有指數運算符 **:

# a = 4
a = 2 ** 2
複製代碼

Lists

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]
複製代碼

Strings

Python 中的字符串很像 JavaScript 中的字符串。它們都是不可變化的數據。均可以用訪問數組元素的方式來訪問字符串中的一個字符。

name = 'Mario'

# M
print(name[0])

# 不行,名字仍是 'Mario'
name[0] = 'W'
複製代碼

Dictionaries

字典是有鍵值對關係的數據,像 JavaScript 中的對象同樣。事實上,字典能夠用 JSON 語法來申明:

# python 的字典
person = {
  'name': 'Mario',
  'age': 24
}

# Mario
print(person['name'])
複製代碼

有個很方便的方法能夠取字典中的某個鍵對應的值,而且在這個鍵不存在的狀況返回一個默認值:

# 由於 `gender` 不存在,因此會獲得 'non-binary'
person.get('gender', 'non-binary')
複製代碼

None

None 就是 JavaScript 中的 null。表示沒有值,而且在 if 判斷中結果是 非真

x = None

if not x:
  print('x is falsy!')
複製代碼

Functions

像 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)
複製代碼

Modules

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 只支持用原型鏈和原型鏈式的繼承。

Classes

# 定義類
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)
複製代碼

Inheritance

一個類能夠繼承別的類。

# 繼承 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

記住,學習一門語言的最好的方式是去寫,去多寫。因此開始寫吧。

相關文章
相關標籤/搜索