Python 與 JavaScript 語法差別點

隨着人工智能技術的普及,愈來愈多的前端程序員開始關注相關技術。Python 做爲人工智能領域最經常使用的語言,與前端程序員平常使用的語言 JavaScript 同屬腳本語言,且在二者發展過程當中,社區也多有相互借鑑之處,所以有不少類似。一個熟悉 JavaScript 語言的前端程序員,經過掌握了他們之間的不一樣之處,能夠快速上手 Python 。前端

如下是我學習過程當中記錄的 Python 不一樣於 JavaScript 的語法點,方便隨手查閱。c++

類型與運算

  • 布爾類型兩種關鍵字爲 True False
  • 邏輯運算與、或、非關鍵字爲 and or not
  • 空值爲 None
  • 精確除法 / ; 取整除法 //
  • 格式化字符串(相似模板字符串)的佔位符 '%d %f %s %x' % (1, 1.2, 'aaa', '0x16')
  • 各種型與布爾類型的轉換:只要x是非零數值、非空字符串、非空list等,就判斷爲True,不然爲False
  • 強類型,不一樣類型沒法比較,需使用顯式的轉換函數

代碼結構

  • 冒號與縮進表示代碼塊,縮進多少不作規定
  • 條件判斷:
if a > b:
	a++
elif:
	b++
else:
	c++
複製代碼
  • 循環遍歷數組採用 for in
  • 暫時空缺的語句塊能夠用關鍵字pass佔位
  • try語句塊:
try:
    print('try...')
    r = 10 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
finally:
    print('finally...')
print('END')
複製代碼
  • 拋異常:raise FooError('invalid value: %s' % s)

list 和 tuple

  • 列表分爲list和tuple程序員

  • 獲取list長度 len()數組

  • 獲取list最後一個參數 datas[-1],倒數第二個 datas[-2]bash

  • list操做方法:app

    末尾增長 datas.append(data)函數

    指定位置插入:datas.insert(index, data)學習

    刪除末尾:datas.pop()ui

    刪除指定位置:datas.pop(index)人工智能

  • list中數據類型可不一樣,這一點與JavaScript相同

  • tuple是不可變的list

  • tuple定義:(1, 2, 3)

  • 僅一個元素的tuple:(1.2, )

dict 與 set

  • 相似Map的類型稱爲爲dict
  • 經過d['key']查找若key不存在會報錯
  • 可用'key' in d 運算判斷是否包含
  • d.get('key')查找若不存在返回None
  • dict可用d.pop('key')刪除元素
  • dict的key須採用字符串、整數等不可變數據類型
  • set只包含不重複的key
  • 要建立一個set,須要提供一個list做爲輸入集合:s = set(list),會自動過濾重複元素
  • set增長 add(key)
  • set刪除 remove(key)
  • set的交集、並集操做 s1 & s2 ; s1 | s2

集合操做

  • 切片:L[a: b: c]從a到b(左閉右開,支持倒數)每c個取一個

  • tuple和str也可切片,結果仍是原類型

  • for in迭代dict默認是迭代key

  • 迭代dict的value:for value in d.values()

  • 迭代dic的key、value:for k, v in d.items()

  • 下標循環:for i, value in enumerate(['A', 'B', 'C']):

  • 引用多個變量的循環:for x, y in [(1, 1), (2, 4), (3, 9)]:

  • 列表生成式:[x * x for x in range(1, 11) if x % 2 == 0],[m + n for m in 'ABC' for n in 'XYZ']

  • 列表生成器:可動態的生成列表中的元素,節省內存空間

  • 列表生成器(generator)建立方式

    將列表生成式外面的[]改成()

    定義generator函數

  • 變量互換:a, b = b, a

  • Iterable包括list、tuple、dict、set、str

  • Iterator包括generator

  • Iterator是惰性求值的

  • 可以使用iter()函數將Iterable轉換爲Iterator

  • Iterable和Iterator均可使用for,只有Iterator可以使用next()

  • map()的返回值類型是Iterator

  • reduce()的回調函數接受兩個參數,相似斐波那契數列,返回值類型是list元素的類型

  • sorted()函數第二個命名關鍵字參數,將原來的元素映射爲可排序的

函數

  • 函數參數數量和類型必須與定義一致,不然會報錯
  • 數據類型轉換函數 int() float() str() bool()
  • 函數定義
def abc(x):
	return 0
複製代碼
  • 函數能夠返回多個值,本質上是構成了一個tuple

  • 可用power(x, n=2)的形式定義默認參數

  • 如調用函數時不是按順序省略參數,可用以下形式:enroll('Adam', 'M', city='Tianjin')

  • 默認參數必須指向不變對象,不然屢次調用函數且修改參數時可能存在問題

  • 參數類型:

    通常的參數叫作位置參數,經過在參數表中的位置代表關係;

    可變參數定義函數calc(*numbers)會將傳入的多個參數組成tuple,在調用時calc(*[1,2,3])表示將該list做爲可變參數傳入;

    關鍵字參數定義函數def person(name, age, **kw):會將傳入的鍵值對做爲dict傳入,調用如person('Adam', 45, gender='M', job='Engineer');

    命名關鍵字參數爲分隔符*以後的參數def person(name, age, *, city, job),必須這樣調用person('Jack', 24, city='Beijing', job='Engineer'),若是函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就再也不須要一個特殊分隔符了:def person(name, age, *args, city, job):,命名關鍵字參數傳入時必須帶有參數名,命名關鍵字參數也可設置默認值def person(name, age, *, city='Beijing', job):

  • 各種型順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數

  • 匿名函數 lambda x: x * x 僅可有一個不須要寫return的表達式

  • 裝飾器@可調用高階函數修改函數定義

  • 偏函數functools.partial的做用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單。

面向對象

  • 類的定義:class Student(object):
  • 構造函數:def __init__(self):
  • 實例的變量名若是以__開頭,就變成了一個私有變量(private),只有內部能夠訪問,外部不能訪問
  • 查看類型:type()
  • 查看繼承關係:isinstance()
  • 實例屬性經過構造函數中定義self.name = name,類的屬性直接寫,類屬性經過實例直接調用,爲共享的,先看實例有沒有,沒有 就調用類屬性
  • 給對象綁定方法後全部實例均可使用
  • 可經過__slots__ = ('name', 'age')限定類的實例可綁定的屬性
  • 可經過裝飾器@property、@xxx.setter定義訪問器
  • 可多重繼承class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):

包與模塊

  • 目錄下必須有__init__.py纔是包,__init__.py便是該包的模塊
  • 任何模塊代碼的第一個字符串都被視爲模塊的文檔註釋;
相關文章
相關標籤/搜索