1. 程式人生 > >Python 3.6學習筆記(一)

Python 3.6學習筆記(一)

示例 ror 功能 put -m 但是 對象 初始化 absolut

開始之前

基礎示例

Python語法基礎,python語法比較簡單,采用縮緊方式。

# print absolute value of a integer
a = 100
if a >= 0:
    print(a)
else:
    print(-a)

可以看到,註釋以#開頭,python的變量不需要任何前綴,行結束不需要結束符號,非常符合我們自然語言的閱讀和書寫習慣。當語句以:結尾時,縮緊的語句視為代碼塊。

Python是大小寫敏感的,這一點需要特別註意。

輸入與輸出

Python可以使用input()函數讀取用戶的輸入,使用print()進行屏幕的輸出。默認情況下,輸入的內容為字符數據類型。

數據類型

整數

Python可以處理任意大小的整數,在程序中的表示方法和數學上的寫法一模一樣,可以使用0xff00的方式表示十六進制。

Python中使用/進行除法運算,得到的結果是浮點數。使用//進行除法運算,得到的結果是整數。使用%,表示取余數。

浮點數

浮點數就是小數,可以使用數學寫法,如:1.23,-9.01,也可以使用科學計數法表示,如:1.23e9,1.2e-5

字符串

字符串是使用`括起來的任意文本。可以使用*對特殊字符進行轉義。可以使用r‘‘的形式,表示內部的字符串默認不進行轉義。對於字符串內有換行等多行內容的,可以使用’’’…’’’的形式,多行字符前也可以加r*。

在最新的Python 3版本中,字符串是以Unicode編碼的,也就是說,Python的字符串支持多語言。對於單個字符的編碼,Python提供了ord()函數獲取字符的整數表示,chr()函數把編碼轉換為對應的字符。以Unicode表示的str通過encode()

方法可以編碼為指定的bytes,如:>>> ‘ABC‘.encode(‘ascii’)。反過來,如果我們從網絡或磁盤上讀取了字節流,那麽讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法

在Python中,采用的格式化方式和C語言是一樣的,如下:
>>> ‘Hi, %s, you have $%d.‘ % (‘Michael‘, 1000000)

布爾值

布爾值:TrueFalse。也可以用布爾代數表示:3 > 2,* 3 < 2。布爾值的運算符號:andornot*。

空值

空值是Python裏一個特殊的值,用None

表示。

變量

Python中的變量時動態變量,即變量的屬性是在賦值的時候才決定的,變量名稱必須是大小寫英文、數字和*_*的組合,且不能用數字開頭。Python中沒有常量的概念,通常使用全部大寫的變量來表示常量。

列表 list

list 是一種有序的集合,可以隨時添加和刪除其中的元素。用索引來訪問list中每一個位置的元素,索引是從0開始的。當索引超出了範圍時,Python會報一個IndexError錯誤。如果要取最後一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最後一個元素。

>>> classmates = [‘Michael’,’Bob’,’Tracy‘]
>>> classmates
[‘Michael’,’Bob‘,‘Tracy’]
>>> len(classmates)
3
>>> classmates[0]
‘Michael’
>>> classmates.append(‘Adam’)    #追加元素到末尾
>>> classmates
[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘Adam’]
>>> classmates.insert(1, ‘Jack’)    #追加元素到指定位置
>>> classmates
[‘Michael‘, ‘Jack‘, ‘Bob‘, ‘Tracy‘, ‘Adam’]
>>> classmates.pop()    #刪除末尾的元素,使用pop(i)可以刪除指定位置的元素
‘Adam‘
>>> classmates
[‘Michael‘, ‘Jack‘, ‘Bob‘, ‘Tracy‘]

元組 tulp

元組 tulp 也是有序列表,與list的區別在於,一旦初始化就不能修改。沒有append、insert等方法。
tulp的定義方式如下:

>>> classmates = (‘Michael’, ‘Bob’, ’Tracy‘)

tulp 本身的元素不能發生變化,但是如果元素為list,那麽list中的內容是可變的。

字典 dict

dict 全稱 dictionary ,在其他語言中稱為 map,在PHP中其實就是 Array,使用鍵-值(Key-Value)的方式進行存儲,具有極快的查找速度。使用範例

>>> d = {‘Michael‘: 95, ‘Bob‘: 75, ‘Tracy‘: 85}    #dict的定義
>>> d[‘Michael’]    #dict取值的方式
95
>>> d[‘Adam‘] = 67    #dict設置新值的方式
>>> ‘Thomas‘ in d     #判斷key是否存在
False
>>> d.get(‘Thomas’)   #get方式取值,如果不存在則返回None
>>> d.get(‘Thomas‘,-1)#指定不存在時的返回值
-1
>>> d.pop(‘Bob’)      #刪除某個key
75

set

set和dict類似,也是一組key的集合,但不存儲value。如下示例:

>>> s = set([1, 2, 3])    #初始化時提供一個list作為輸入集合
>>> s
{1, 2, 3}
>>> s.add(4)              #使用add方法添加元素
>>> s
{1, 2, 3, 4}
>>> s.remove(2)           #使用remove方法
>>> s
{1, 3, 4}

set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作。

控制語句

條件判斷

條件判斷比較簡單,主要是不要忘記寫:,看看例子吧。

>>> age = 3
>>> if age >= 18:
...     print(‘your age is‘, age)
...     print(‘adult‘)
... else:
...     print(‘your age is‘, age)
...     print(‘teenager‘)
...
your age is 3
teenager

更多的條件判斷。

>>> age = 3
>>> if age >= 18:
...     print(‘adult‘)
... elif age >= 6:
...     print(‘teenager‘)
... else:
...     print(‘kid‘)
...
kid

循環

Python中的循環有兩種,一種是for...in循環,依次把list或tulp中的每個元素叠代出來。

>>> classmates
[‘Michael‘, ‘Jack‘, ‘Bob‘, ‘Tracy‘]
>>> for name in classmates:
...     print(name)
...
Michael
Jack
Bob
Tracy

第二種循環是while循環,只要條件滿足,就不斷循環,條件不滿足時退出循環。

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

跳出循環,可以使用 break 跳出循環。
跳過本次循環,可以使用 continue 跳過本次循環,繼續下一次循環。

函數

調用函數

Python中內置了很多函數,可以直接調用。在交互模式中,可以通過help(abs)查看函數的用法。

定義函數

在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。如果沒有return語句,函數執行完畢後也會返回結果,只是結果為None。return None可以簡寫為return。

示例如下:

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

在Python交互環境中定義函數時,註意Python會出現的提示。函數定義結束後需要按兩次回車重新回到>>>提示符下。

返回多個值

在其他語言中,一般只能返回一個值或者一個數組、對象,在Python中,可以通過tulp變通的返回多個值。

import math

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)

在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。

位置參數

Python的函數定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數外,還可以使用默認參數、可變參數和關鍵字參數,使得函數定義出來的接口,不但能處理復雜的參數,還可以簡化調用者的代碼。

def power(x):        #x 就是一個位置參數
    return x * x

def power(x, n):    #x,n都是位置參數
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

def power(x, n=2):    #x,n都是位置參數,n設置了默認值
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

有幾點要註意:
一是必選參數在前,默認參數在後,否則Python的解釋器會報錯
二是當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就可以作為默認參數。
有多個默認參數時,調用的時候,既可以按順序提供默認參數。也可以不按順序提供部分默認參數。當不按順序提供部分默認參數時,需要把參數名寫上。
需要註意的是:默認參數必須指向不變對象!

可變參數

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

定義可變參數和定義一個list或tuple參數相比,僅僅在參數前面加了一個*號。在函數內部,參數numbers接收到的是一個tuple,因此,函數代碼完全不變。但是,調用該函數時,可以傳入任意個參數,包括0個參數。Python允許你在list或tuple前面加一個*號,把list或tuple的元素變成可變參數傳進去。

關鍵字參數

關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。

def person(name, age, **kw):
    print(‘name:‘, name, ‘age:‘, age, ‘other:‘, kw)

關鍵字參數有什麽用?它可以擴展函數的功能。比如,在person函數裏,我們保證能接收到name和age這兩個參數,但是,如果調用者願意提供更多的參數,我們也能收到。試想你正在做一個用戶註冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數來定義這個函數就能滿足註冊的需求。

#可以先組裝出一個dict,然後,把該dict轉換為關鍵字參數傳進去
>>> extra = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
>>> person(‘Jack‘, 24, city=extra[‘city‘], job=extra[‘job‘])
name: Jack age: 24 other: {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}

#簡化的寫法
>>> extra = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
>>> person(‘Jack‘, 24, **extra)
name: Jack age: 24 other: {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}

extra表示把extra這個dict的所有key-value用關鍵字參數傳入到函數的kw參數,kw將獲得一個dict,註意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數外的extra。

命名關鍵字參數

如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收city和job作為關鍵字參數。這種方式定義的函數如下。命名關鍵字參數需要一個特殊分隔符**後面的參數被視為命名關鍵字參數。

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

>>> person(‘Jack‘, 24, city=‘Beijing‘, job=‘Engineer‘)
Jack 24 Beijing Engineer

如果函數定義中已經有了一個可變參數,後面跟著的命名關鍵字參數就不再需要一個特殊分隔符*了。

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

參數組合

在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用。但是請註意,參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

Python 3.6學習筆記(一)