Python核心程式設計筆記第二章----快速入門

Cytues發表於2018-05-02

2.1.程式輸出,print語句及"Hello World!"

核心筆記:在交換式直譯器中顯示變數的值

在一般情況下,需要輸入print來檢視各變數的值,但在互動式直譯器中,可以直接輸入變數名檢視該值的原始值。

>>> String = 'love you'
>>>
>>> print String
love you
>>> String
'love you'

下劃線  _  在直譯器中表示最後一個表示式的值。

>>> _
'love you'

print的語句與字串格式操作符%結合使用,實現字串替換功能。

>>> print 'I %s so much' % String
I love you so much

%s表示用一個字串來替換,%d表示用一個整型來替換,%f表示浮點型替換。

2.2.程式輸入和raw_input()內建函式

從使用者那得到資料的最簡單方法就是raw_input()內建函式。可以用int()內建函式將使用者輸入的字串轉換為整型。

>>> nums = raw_input('Input some numbers: ')
Input some numbers: 1103
>>> print 'The luck number is %d.' % int(nums)
The luck number is 1103.
>>> names = raw_input('Input some names: ')
Input some names: cytus
>>> print 'my name is %s.' % names
my name is cytus.
不使用int轉換字串格式則會報一個異常
>>> print '%d' % nums
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

型別錯誤:%d只能替換整型型別,而不是字串。

核心筆記:從互動式直譯器中獲得幫助

如果需要得到一個不熟悉的函式能幹什麼事情,只需要對其呼叫內建函式help()

>>> help(list)
Help on class list in module __builtin__:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items

核心風格:一直在函式外做使用者互動工作

函式應該保持清晰性,只接受引數,返回結果。輸出結果由函式外部來實現,函式只處理從使用者得到的資訊,返回或者不返回值,在函式中應少用print和raw_input語句,這樣就能夠在其他地方使用函式而不用擔心自定義輸出的問題。

2.3.註釋

#號表示註釋,從#開始到一行結束的內容都是註釋。註釋一般放在語句上方,做解釋作用。還有一種叫文件字串的特別註釋,在類和函式和模組的起始新增一個字串,起到線上文件的功能。

>>> # love you
... print 'i love you'
i love you
>>>
>>> def you():
...     "i so like you"
...     return True
...
>>> print you()
True

2.4.操作符

+ - * / // % **

加減乘除和取餘都是標準操作符。Python有兩種除法操作符,單斜槓為傳統除法,雙斜槓用作浮點除(對結果四捨五入)。傳統除法是指兩個操作符都為整型,將執行地板除(取比商小的最大整數),而浮點除是真正的除法。

乘方操作符,雙星號(**)

>>> print -3 + 5 * 2 - 2 ** 3
-1

操作符優先順序:+和-號優先順序最低,* / // %優先順序較高,單目操作符+和-優先順序更高,乘方優先順序最高。

比較操作符:< <= > >= == != <>

>>> 4 > 3
True
>>> 5 < 1
False
>>> 7 != 3
True
>>> 7 <> 3
True

!=和<>都是不等於,推薦使用前者

邏輯操作符:and      or       not

>>> 2 < 4 and 2 <3
True
>>>
>>> 2> 6 or 2 <5
True
>>> 3 < 4 <6
True

核心風格:合理使用括號增強程式碼的可讀性

多使用括號總沒錯,使程式更具有邏輯性,可讀性,可維護性,更難出現異常。

2.5.變數和賦值

變數名只能用大小寫字母或者_開頭,其他字元可以用數字字母_。Python的大小寫敏感,list和List是兩個不同變數。

Python是動態型語言,不需要預先宣告變數的型別。變數的型別和賦值在賦值的那一刻被初始化,變數賦值通過等號來執行。

>>> my_name = 'cytus'
>>> you_name = 'loli'
>>> do_s = 'love'
>>> how_b = 'so much'
>>> print '%s %s %s %s' % (my_name, do_s, you_name, how_b)
cytus love loli so much

Python也支援增量賦值

>>> s = 0
>>> s = s + 5
>>> print s
5
>>> s += 5
>>> print s
10

2.6.數字

有五種基本數字型別:有符號型別,長整型,布林值,浮點值,負數

int   123  434  657  -22  0x89  011 

long  7321837128L  3874823478L 0xADA2768DDAL

bool  True   False

float  3.14  3772.22  -90.   6.443e23

complex  6.23+1.5j  0+1j

布林值是特殊的整型,假如布林值和一個數字相加,True會被當成整數1,False會被當成整數0.

2.7.字串

字串為引號之間的字符集合。支援使用成對的雙引號單引號三引號(三個連續的單引號或者雙引號)用來包含特殊字元。使用索引操作符[]和切片操作符[:]可以得到子字串。第一個字元的索引是0,最後一個字元的索引是-1.加號用於字串連線,星號用於字串重複。

>>> str1 = 'iill'
>>> str2 = 'lloo'
>>> sr1[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sr1' is not defined
>>> str1[0]
'i'
>>> str1[2:3]
'l'
>>> str1[-1]
'l'
>>> str1 + str2
'iilllloo'
>>> str1 * 3
'iilliilliill'
>>> '-' * 20
'--------------------'
>>> str1 = '''you are
... loser'''
>>> str1
'you are\nloser'

2.8.列表和元組

可以將列表和元組當成普通的陣列,它能儲存任意數量的Python物件。和陣列一樣通過0開始的陣列索引訪問元素,但是列表和元組可以儲存不同的物件。

列表和陣列的區別:列表使用[]包裹元素,元素的個數和元素的值可以被改變。元組用()包裹,不可以更改(內容假如為可變型別可以更改其內容)。元組看成是隻讀的列表,可以通過切片運算得到子集

>>> aList = [1, 3, 5, 7]
>>> aList
[1, 3, 5, 7]
>>> aList[:3]
[1, 3, 5]
>>> aList[:-1]
[1, 3, 5]
>>> aList[1] = 9
>>> aList
[1, 9, 5, 7]
>>> aTuple = ('aini', 77, 88, [123])
>>> aTuple
('aini', 77, 88, [123])
>>> aTuple[3]
[123]
>>> aTuple[:3]
('aini', 77, 88)
>>> aTuple[3] = 22
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

異常是指元組是不可變的

2.9.字典

由鍵-值對構成。一般由數字和字串做鍵,可變型別列表不能做字典的鍵。值可以是任意Python物件。字典元素用大括號{}包裹

>>> data_base = {'name': 'cytus', 'age': 18}
>>> data_base['name']
'cytus'
>>> data_base.keys()
['age', 'name']
>>> for key in data_base:
...     print key, data_base[key]
...
age 18
name cytus

2.10.程式碼塊及縮排對齊

程式碼塊通過縮排對齊表達程式碼邏輯,可讀性更高,能清楚的表達一個語句屬於哪個程式碼塊。程式碼塊可以只有一個語句組成。

2.11.if語句

nums = int(raw_input("Input numbers: "))
if nums < 100:
    print 'The number is too small.'
elif nums > 1000:
    print 'The number is so big.'
elif nums <= 1000 and nums >= 100:
    print 'The number is fit.'
else:
    print 'Try some numbers.'

if用來判斷條件是否複合程式要求,符合則進行下一步,不符合則終止,elif = else-if用於多個條件判斷,else當以上if語句都不成立時才執行。

2.12.while迴圈

i = 0
while i < 10:
    print i + 1
    i += 1

在while迴圈下使用縮排表示語句在迴圈體中。while迴圈語句會一直無限迴圈,直到迴圈體內部break或者表示式的值變成0或False。

2.13.for迴圈和range()內建函式

Python中的for接受可迭代物件作為其引數,例如序列或迭代器,每次迭代其中一個元素。

str1 = [23, 232, 34, 3434]
for i in str1:
    print i
    
輸出為一個列項序列,這是因為print語句預設給每一行新增一個換行符,只要在print語句的最後新增一個逗號,就可以改變它這種行為。
str1 = [23, 232, 34, 3434]
for i in str1:
    print i,
23 232 34 3434

帶逗號的print語句輸出元素之間會自動新增一個空格,來美觀輸出。

python range() 函式可建立一個整數列表,一般用在 for 迴圈中,用來輸出一個遞增計數的序列。

for i in range(7):
    print i
0
1
2
3
4
5
6

range()函式經常和len()函式一起用於字串索引。

>>> foo = 'abc'
>>> for i in range(len(foo)):
...     print foo[i], '(%d)' % i
...
a (0)
b (1)
c (2)

但是這樣操作只能迴圈一個,元素或者索引。而enumerate()函式很好彌補了這一點。

enumerate() 函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。

>>> for i, ch in enumerate(foo):
...     print ch, '(%d)' % i
...
a (0)
b (1)
c (2)

2.14.列表解析

列表解析表示你可以在一行中使用一個for迴圈將所有值放到一個列表當中:

a = [x ** 4 for x in range(3)]
for i in a:
    print i
0
1
16

還可以挑選出符合的值放入列表

a = [x ** 4 for x in range(8) if not x % 2]
for i in a:
    print i
0
16
256
1296

2.15.檔案和內建函式open(),file()

檔案訪問是相當重要的一環,一些工作完成後,將它儲存到持久儲存很重要

使用open()函式開啟一個檔案

file_1 = open(filename, access_mode = 'r')

file_name變數包含我們希望開啟的檔名,access_mode中'r'表示讀取,'w'表示寫入,'a'表示新增,'+'表示讀寫,'b'表示二進位制訪問。預設的檔案模式是'r'讀取。當一個檔案物件返回後,就可以使用它的一些方法,比如readlines(),close()。檔案物件的方法屬性也必須通過句點屬性標識法訪問

核心筆記:什麼是屬性?

屬性是與資料有關的專案。屬性可以是簡單的資料值,也可以是可執行物件。類,模組,檔案,複數等物件都擁有屬性,使用句點屬性標識法,也就是在物件名和屬性名之間加一個句號:例,list.append()

filename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
    print eachLine,
fobj.close

以上的程式碼用來顯示檔案內容。

在print語句中使用逗號來印製自動生成的換行符號,檔案的每行文字都自帶了換行字元,如果我們不抑制print語句產生的換行符,文字在顯示時就會有額外的空行產生。

file()內建函式功能跟open()函式一致,是一個工廠函式(生成檔案物件)。

2.16.錯誤和異常

要給程式碼新增錯誤檢測及異常處理,只需要將它們封裝在try-except語句中。try之後的程式碼組,就是打算管理的程式碼,except之後的程式碼組,則是處理錯誤的程式碼。

try:
    filename = raw_input('Enter file name: ')
    fobj = open(filename, 'r')
    for eachLine in fobj:
        print eachLine
    fobj.close()
except IOError, e:
    print 'file open error: ', e

也可以通過raise語句丟擲一個異常。

2.17.函式

Python中函式使用小括號呼叫,函式在呼叫之前必須先定義。如果函式中沒有return語句,就會自動返回None物件。

2.17.1.如何定義函式

用def 關鍵字及緊隨其後的函式名,再加上該函式需要的幾個引數組成。(可以沒有引數)以一個:號結尾。

def add(m):
     return m + m 

這個函式實現了自身相加

2.17.2如何呼叫函式

print add(3)
print add(20)
print add('abc')
6
40
abcabc

函式名加上()內所傳遞的引數(沒有則不傳),print語句輸出函式返回值

2.17.3預設引數

函式的引數可以有一個預設引數,如果有提供預設值,在函式定義中,引數以賦值語句形式提供。

2.18.類

類是物件導向程式設計的核心,它扮演相關資料及邏輯容器的角色。

如何定義類

使用class關鍵字定義類。可以提供一個可選的父類或者說基類;如果沒有合適的基類,就使用object作為基類

class MyClass(object):
      ...

2.19.模組

模組是一種組織形式,它將彼此有關係的Python程式碼組織到一個個獨立檔案當中,模組可以包含可執行程式碼,函式和類,或者這些東西的組合。自己也可以建立模組,建立一個Python的原始檔,模組名字就是不帶.py字尾的檔名。用import匯入使用

2.19.1如何訪問一個模組函式或訪問一個模組變數

一旦匯入完成,模組的屬性可以通過句點屬性標識法訪問

module.function()

module.variable

匯入模組的方法,這裡以random模組舉例

import random
from random import randint
import random as randint
import random *

*表示取出random裡面所有的屬性

2.20.實用的函式

dir():顯示物件的屬性,如果沒有提供引數,則顯示全域性變數的名字。

help():顯示物件的文件字串,沒有提供引數則進入互動式幫助

int():將一個物件轉換成整型

len():返回物件的長度

open(): 以mode方式開啟一個檔案

range(): 返回一個整型列表

raw_input():等待使用者輸入一個字串,可以提供一個可選的引數str用作提示資訊

str(): 將一個物件轉換為字串

type(): 返回物件的型別



相關文章