1. 程式人生 > >有c/c++的基礎快速上手python總結

有c/c++的基礎快速上手python總結

Python語法

Python基礎

資料型別和變數

  • python沒有 || && 等,用and, or, not

字串和編碼

  • ASCII(僅英文) ,Unicode(所有語言編碼,但是耗一倍空間) ,UTF-8 (前兩者折中,可變長編碼,建議使用)

  • ord()函式獲取字元的整數表示 ,chr()函式把編碼轉換為對應的字元

    >>> ord('A')
    65
    >>> ord('中')
    20013
    >>> chr(66)
    'B'
    >>> chr(25991)
    '文'
  • 要計算str包含多少個字元,可以用len()

    函式:

    >>> len('ABC')
    3
    >>> len('中文')
    2
  • %運算子就是用來格式化字串的

    print('%2d-%02d' % (3, 1))
    print('%.2f' % 3.1415926)
  • 另一種格式化字串的方法是使用字串的format()方法,它會用傳入的引數依次替換字串內的佔位符{0}{1}……

    >>> 'Hello, {0}, 成績提升了 {1:.1f}%'.format('小明', 17.125)
    'Hello, 小明, 成績提升了 17.1%'

列表list和元組tuple

  • len()函式可以獲得list元素的個數

    >>> len(classmates)
    3
  • 還可以用-1做索引,直接獲取最後一個元素:

    >>> classmates[-1]
    'Tracy'

    以此類推,可以獲取倒數第2個、倒數第3個:

    >>> classmates[-2]
    'Bob'
    >>> classmates[-3]
    'Michael'
    >>> classmates[-4]
  • list是一個可變的有序表,所以,可以往list中追加元素到末尾:

    >>> classmates.append('Adam')
    >>> 
    classmates ['Michael', 'Bob', 'Tracy', 'Adam']

    也可以把元素插入到指定的位置,比如索引號為1的位置:

    >>> classmates.insert(1, 'Jack')
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

    要刪除list末尾的元素,用pop()方法:

    >>> classmates.pop()
    'Adam'
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy']

    要刪除指定位置的元素,用pop(i)方法,其中i是索引位置:

    >>> classmates.pop(1)
    'Jack'
    >>> classmates
    ['Michael', 'Bob', 'Tracy']

    要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:

    >>> classmates[1] = 'Sarah'
    >>> classmates
    ['Michael', 'Sarah', 'Tracy']
  • tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改

    classmates = ('Michael', 'Bob', 'Tracy')
  • 只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:

    >>> t = (1,)
    >>> t
    (1,)

條件判斷

  • if,else後需要加冒號

    if age >= 18:
      print('adult')
    elif age >= 6:
      print('teenager')
    else:
      print('kid')
  • Python提供了int()函式來把str轉換成整數

    s = input('birth: ')
    birth = int(s)

迴圈

  • for迴圈

    names = ['Michael', 'Bob', 'Tracy']
    for name in names:
      print(name)
  • Python提供一個range()函式,可以生成一個整數序列,再通過list()函式可以轉換為list。比如range(5)生成的序列是從0開始小於5的整數:

    >>> list(range(5))
    [0, 1, 2, 3, 4]

    range(101)就可以生成0-100的整數序列,計算如下:

    sum = 0
    for x in range(101):
      sum = sum + x
    print(sum)
  • while迴圈,不加括號,加冒號

    sum = 0
    n = 99
    while n > 0:
      sum = sum + n
      n = n - 2
    print(sum)

字典dict和集合set

  • dict

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95
  • 把資料放入dict的方法,除了初始化時指定外,還可以通過key放入:

    >>> d['Adam'] = 67
    >>> d['Adam']
    67
  • 由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值沖掉:

    >>> d['Jack'] = 90
    >>> d['Jack']
    90
    >>> d['Jack'] = 88
    >>> d['Jack']
    88
  • 通過in判斷key是否存在:

    >>> 'Thomas' in d
    False
  • 通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

    >>> d.get('Thomas')
    >>> d.get('Thomas', -1)
    -1
  • 刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:

    >>> d.pop('Bob')
    75
    >>> d
    {'Michael': 95, 'Tracy': 85}

    請務必注意,dict內部存放的順序和key放入的順序是沒有關係的。

  • 和list比較,dict有以下幾個特點:

    1. 查詢和插入的速度極快,不會隨著key的增加而變慢;
    2. 需要佔用大量的記憶體,記憶體浪費多。

    而list相反:

    1. 查詢和插入的時間隨著元素的增加而增加;
    2. 佔用空間小,浪費記憶體很少。

    所以,dict是用空間來換取時間的一種方法。

  • 集合set:set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。

  • 要建立一個set,需要提供一個list作為輸入集合:

    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3}
  • 通過add(key)方法可以新增元素到set中,可以重複新增,但不會有效果:

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}

    通過remove(key)方法可以刪除元素:

    >>> s.remove(4)
    >>> s
    {1, 2, 3}
  • set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}

函式

呼叫函式

  • ython內建的常用函式還包括資料型別轉換函式,比如int()函式可以把其他資料型別轉換為整數:

    >>> int('123')
    123
    >>> int(12.34)
    12
    >>> float('12.34')
    12.34
    >>> str(1.23)
    '1.23'
    >>> str(100)
    '100'
    >>> bool(1)
    True
    >>> bool('')
    False

定義函式

  • 空函式如果想定義一個什麼事也不做的空函式,可以用pass語句:

    def nop():
      pass

    pass語句什麼都不做,那有什麼用?實際上pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的程式碼,就可以先放一個pass,讓程式碼能執行起來。

    pass還可以用在其他語句裡,比如:

    if age >= 18:
      pass

    缺少了pass,程式碼執行就會有語法錯誤。

  • 資料型別檢查可以用內建函式isinstance()實現:

    def my_abs(x):
      if not isinstance(x, (int, float)):
          raise TypeError('bad operand type')
      if x >= 0:
          return x
      else:
          return -x

函式的引數

  • 必選引數在前,預設引數在後

  • 可變引數:

    要定義出這個函式,我們必須確定輸入的引數。由於引數個數不確定,我們首先想到可以把a,b,c……作為一個list或tuple傳進來,這樣,函式可以定義如下:

    def calc(numbers):
      sum = 0
      for n in numbers:
          sum = sum + n * n
      return sum

    但是呼叫的時候,需要先組裝出一個list或tuple:

    >>> calc([1, 2, 3])
    14
    >>> calc((1, 3, 5, 7))
    84

    如果利用可變引數,呼叫函式的方式可以簡化成這樣:

    >>> calc(1, 2, 3)
    14
    >>> calc(1, 3, 5, 7)
    84

    所以,我們把函式的引數改為可變引數:

    def calc(*numbers):
      sum = 0
      for n in numbers:
          sum = sum + n * n
      return sum

    *nums表示把nums這個list的所有元素作為可變引數傳進去。

  • 如果已經有一個list或者tuple,要呼叫一個可變引數怎麼辦?可以這樣做:

    >>> nums = [1, 2, 3]
    >>> calc(nums[0], nums[1], nums[2])
    14

    這種寫法當然是可行的,問題是太繁瑣,所以Python允許你在list或tuple前面加一個*號,把list或tuple的元素變成可變引數傳進去:

    >>> nums = [1, 2, 3]
    >>> calc(*nums)
    14

    *nums表示把nums這個list的所有元素作為可變引數傳進去。這種寫法相當有用,而且很常見。
    有毒

  • 命名關鍵字引數

    如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收cityjob作為關鍵字引數。這種方式定義的函式如下:

    def person(name, age, *, city, job):
      print(name, age, city, job)

    和關鍵字引數**kw不同,命名關鍵字引數需要一個特殊分隔符**後面的引數被視為命名關鍵字引數。