歡迎光臨
每天分享高質量文章

Python讀書筆記:70個註意的小Notes

摘要:在閱讀python相關書籍中,對其進行簡單的筆記紀要。旨在註意一些細節問題,在今後專案中靈活運用,並對部分小notes進行程式碼標註。

1 python始終記錄變數最新值。
2 變數應簡短且具有描述性,如student_name等。
3 變數名推薦小寫。
4 單雙引號括起來的,字串可以包含引號和撇號。用法:”this’s a cup”
5 title()將每個單詞的首字母都改為大寫。用法:str.title()
6 upper()將字串轉化為大寫。用法:str.upper()
7 lower()將字串轉化為小寫。用法:str.lower()
8 空白泛指任何非列印字元。如空格、製表符和換行符。
9 rstrip()剔除字串末尾空白。用法:str.rstrip()
10 lstrip()剔除字串開頭空白。用法:str.lstrip()
11 strip()剔除字串兩端空白。用法:str.strip()
12 Python使用兩個稱號表示乘方。用法:3 ** 2
13 程式設計理念。Python之禪:import this
14 list中使用逗號來分割其中的元素。
15 list索引-1傳回最後一個元素串列,-2以此類推。用法:list[-3:]
16 list[0] = ‘update’ 修改串列元素
17 list.append(‘add’) 串列中新增元素
18 list.insert(0.’insert’) 串列中指定位置插入元素
19 del list[0] del元素刪除list元素
20 newlist = list.pop()方法pop()刪除元素
21 從串列中刪除元素且不再使用用del方法,刪除元素後還有可能用選擇pop()
22 list.remove(‘element’) 根據值移除第一個指定的元素,可接著使用。
23 sort()串列按照字母永久性排序。如:list.sort()
24 sort()串列按照字母相反的排序。如:list.sort(reverse=True)
25 reverse() 反轉串列元素排序。用法:list.reverse()
26 for迴圈遍歷時候選擇有意義的名稱。用法: for cat in cats:
27 range() 生成一系列數字。用法: numbers= list(range(1,11,2))
28 list的內建統計函式。用法:min(list)/max(list)/sum(list)
29 python的切片功能。用法: list[0:3]/list[:]/list[-3:]/list[:9]
30 list複製。用法:new_foods = old_food[:]
31 元組包括一些列不可修改的元素且用圓括號標識。用法:tulple = (2,3)
32 檢查是否相等時不考慮大小寫。用法:str.lower() == ‘somestr’
33 使用and檢查多個條件。用法:condition1>=1 and condition2>=2 and …
34 使用or檢查多個條件。用法:condition1>=1 or condition2>=2 or …
35 使用多個串列。用法:

list1 = ['1','2','3','4']
list2 = ['1','4']
for l2 in list2:
    if l2 in list1:
        go()
    else:
        pass

36 比較運運算元兩邊各新增空格,便於可讀性。用法:if age > 40:
37 dict修改值,用法:dict[‘key’] = value
38 dict刪除鍵值對,用法: del dict[‘key’]
39 字典的遍歷,用法:

for key,value in dict.items():
for key in dict:
for key in dict.keys():
for value in dict.values():
for value in set(dict.values()): # 遍歷字典的無重覆值

40 字典串列,用法:

dict1 = ['key1':'values1','key2':'values2']
dict2 = ['key1':'values3','key2':'values4']
dict3 = ['key1':'values5','key2':'values6']

dicts = [dict1,dict2,dict3]

for dict in dicts:
    pass  

41 字典中儲存串列,用法:

dict1 = {'key1':'values1','key2':['values1','values2']}
for dict in dict1['key2']:

42 字典中儲存字典,用法:

dicts = {
'keys1':{'key1':'values1''key1':'values2''key1':'values3'},
'keys2':{'key2':'values2''key2':'values2''key2':'values3'}
}

43 input接收使用者輸入,用法:message = input(‘user input some values!’)
44 %取模運算判斷奇偶,用法:

if (4 % 3) == 0:
    print('偶數'):
else:
    print('奇數')

45 while迴圈的常規用法:

current_number = 1
while current_number <= 10:
    print('current_number')
    current_number += 1

46 while迴圈使用標誌的用法:

flag = True
while flag:
    message = input(prompt)

47 串列之間移動元素,用法:

while list[]:
    newlist.append(list[].pop())

48 刪除特定的元素,用法:

while element in list:
   list.remove(element)

49 形參與引數的理解,用法:

def method(username): # username形參
method('zhangsan'# zhangsan引數

50 位置引數,用法:

def describe(name,age):
describe('zhangsan',22# 引數位置對應傳遞

51 關鍵字引數是傳遞函式的名稱-值對,用法:

def describe(name,age):
describe(name='zhangsan',age=22# 關鍵字引數
describe(age=22,name='zhangsan'# 關鍵字引數,位置不重要

52 形參設定預設值,用法:def describe(name=’lisi’,age):
53 傳回值,用法:

def describe(name='lisi',age):
    des = name + str(age)
return des # 可以傳回字典、串列等形式

54 串列引數,用法:

lists = ['huangsan','lisi','wangjun','denghui']
def cats_name(lists):
    for list in lists:
        print("'my love is :\t'+list".title())

55 傳遞任意引數,用法:def cats_name(*cats): # 可以傳遞多個形參
56 位置引數和任意數量引數:

def cats_name(parament1,parament2,*cats): # 可以傳遞多個形參
cats_name(para1,para2,para3,para4,...)

57 任意引數和關鍵字引數,用法:(cats.py)

def cats_name(parament1,parament2,**cats): # 可以傳遞多個形參
cats_name(para1,para2,para3,newname=para4,...)

58 匯入整個模組,用法:

import cats
cats.cats_name(para1,para2,para3,newname=para4,...)

59 匯入特定的函式,用法:from nltk import map_tag as mt
60 匯入模組所有函式,用法:from nltk import *
61 形參預設時,兩邊不能為空,用法:def function_name(parament_0,parament_1=’default’)
62 類的命名是駝峰型即首字母大寫。
63 init(self,papa1,para2):避免python預設方法跟普通方法名稱衝突,self必不可少,必須位於其他形參的前面,指向實體本身。
64 類的繼承,用法:

# 父類
class Animal():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def animal_call(self):
        print('this is '+self.name.title()+' call.')


# 子類
class Cat(Animal):
    def __init__(self,name,age,color):
        super().__init__(name,age)
        self.color =color

    def cat_color(self):
        my_color = 'the cat is '+self.color
        print(my_color)
        return my_color


if __name__ == '__main__':
    cat = Cat('tom',22,'blue')
    cat.animal_call()
    strs=cat.cat_color()

65 幾種類的匯入方式,用法:

from cat import Cat # 匯入單個類
from cat import Animal,Cat # 匯入多個類
from cat # 匯入整個模組
from cat import * # 匯入所有類

66 讀取文字檔案,並刪除字串始末空白,用法:my_str = line.strip()
67 opem()自動建立檔案路徑,若路徑不存在時候。
68 異常程式碼塊:try-except
69 split()建立單詞串列

str = 'this is a string'
str.split()
['this','is','a','string']

70 儲存資料json.dump()和json.load()

import json

# 父類
class Animal():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def animal_call(self):
        print('this is '+self.name.title()+' call.')


# 子類
class Cat(Animal):
    def __init__(self,name,age,color):
        super().__init__(name,age)
        self.color =color

    def cat_color(self):
        my_color = 'the cat is '+self.color
        print(my_color)
        return my_color


if __name__ == '__main__':
    cat = Cat('tom',22,'blue')
    cat.animal_call()
    strs=cat.cat_color()

    filename = r'../AllProject/V4.0EngInfoExtract/Document/EnPapers_single/test.json'
    with open(filename,'w'as f_obj:
        json.dump(strs,f_obj)

    with open(filename,'r'as f_obj:
        strs = json.load(f_obj)
    print(strs)

附加matplotlib相關操作:

71 matplotlib繪製圖表,plot繪製折線圖

import matplotlib
import matplotlib.pyplot as plt
#加入中文顯示
import  matplotlib.font_manager as fm

# 解決中文亂碼,本案例使用宋體字
myfont=fm.FontProperties(fname=r"C:\\Windows\\Fonts\\simsun.ttc")

def line_chart(xvalues,yvalues):
    # 繪製折線圖,c顏色設定,alpha透明度
    plt.plot(xvalues,yvalues,linewidth=10,alpha=0.5,c='red'# num_squares資料值,linewidth設定線條粗細

    # 設定折線圖示題和橫縱坐標標題
    plt.title("Python繪製折線圖",fontsize=30,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('縱坐標',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',labelsize=14)

    # 顯示圖形
    plt.show()

72  matplotlib繪製圖表,scatter繪製散點圖

def scatter_chart(xvalues,yvalues):
    # 繪製散點圖,s設定點的大小,c資料點的顏色,edgecolors資料點的輪廓
    plt.scatter(xvalues,yvalues,c='green',edgecolors='none',s=40)

    # 設定散點圖示題和橫縱坐標標題
    plt.title("Python繪製折線圖",fontsize=30,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('縱坐標',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',which='major',labelsize=10)

    # 設定每個坐標軸取值範圍
    plt.axis([80,100,6400,10000])

    # 顯示圖形
    plt.show()

    # 自動儲存圖表,bbox_inches剪除圖片空白區
    # plt.savefig('squares_plot.png',bbox_inches='tight')

73 Pygal生成可縮略的向量圖檔案

def histogram(xvalues,yvalues):
    # 繪製直方圖
    hist = pygal.Bar()

    # 設定散點圖示題和橫縱坐標標題
    hist.title = '事件頻率的直方圖'
    hist.x_title = '事件的結果'
    hist.y_title = '事件的頻率'

    # 繪製氣溫圖,設定圖形大小
    fig = plt.figure(dpi=128,figsize=(10,6))

    # 事件的結果
    hist.x_labels = xvalues

    # 事件的統計頻率
    hist.add('事件',yvalues)

    # 儲存檔案路徑
    hist.render_to_file('die_visual.svg')

74 讀取csv檔案顯示折線圖

def temper_char():
    dates,highs,lows = [],[],[]
    with open(r'../../../AllProject/PyProject/weather07.csv'as f:
        reader = csv.reader(f)
        essay-header_row = next(reader) # 傳回檔案第一行
        # enumerate 獲取元素的索引及其值
        # for index,column_essay-header in enumerate(essay-header_row):
        #     print(index,column_essay-header)
        for row in reader:
            current_date = datetime.strptime(row[0],"%Y-%m-%d")
            dates.append(current_date)
            highs.append(int(row[1]))
            lows.append((int(row[3])))


    # 接收資料並繪製圖形,facecolor填充區域顏色
    plt.plot(dates,highs,c='red',linewidth=4,alpha=0.5)
    plt.plot(dates,lows,c='green',linewidth=4,alpha=0.5)
    plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)

    # 設定散點圖示題和橫縱坐標標題
    plt.title("日常最高氣溫,2018年7月",fontsize=24,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('溫度',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 繪製斜的日期
    fig.autofmt_xdate()

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',which='major',labelsize=15)

    # 顯示圖形
    plt.show()

75 Github最受歡迎的星標專案視覺化

def repos_hist():
    #檢視API速率限制
    # url = https://api.github.com/rate_limit
    # 執行github API呼叫並儲存響應
    url = 'https://api.github.com/search/repositories?q=language:python&sort;=stars'
    r = requests.get(url)
    print("Status code:",r.status_code) # 狀態碼200表示成功

    # 將API響應儲存在一個變數裡面
    response_dict = r.json()
    print("Hithub總的Python倉庫數:",response_dict['total_count'])

    # 探索有關倉庫的資訊
    repo_dicts = response_dict['items']

    names,stars = [],[]
    for repo_dict in repo_dicts:
        names.append(repo_dict['name'])
        stars.append(repo_dict['stargazers_count'])

    # 視覺化,x_label_rotation圍繞x軸旋轉45度,show_legend圖例隱藏與否
    my_style = LS(base_style=LCS)

    my_config = pygal.Config()
    my_config.x_label_rotation=45 # 橫坐標字型旋轉角度
    my_config.show_legend=False
    my_config.title_font_size=24 # 標題大小
    my_config.label_font_size=14 # 副標題大小,縱橫坐標資料
    my_config.major_label_font_size = 18 # 主標簽大小,縱坐標5000整數倍
    my_config.truncate_label=15  # 專案名稱顯示前15個字
    my_config.show_y_guides=False # 隱藏水平線
    my_config.width=1200 # 自定義寬度
    # chart = pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)
    chart = pygal.Bar(my_config,style=my_style)
    chart.title = 'Github最受歡迎的星標專案'
    chart.x_labels = names
    chart.add('星標',stars)
    chart.render_to_file('python_repos.svg')

###完整的matplotlib視覺化

import matplotlib
import matplotlib.pyplot as plt

import pygal
from pygal.style import LightColorizedStyle as LCS, LightStyle as LS

import csv
from datetime import datetime

import requests

#加入中文顯示
import  matplotlib.font_manager as fm
# 解決中文亂碼,本案例使用宋體字
myfont=fm.FontProperties(fname=r"C:\\Windows\\Fonts\\simsun.ttc")

def line_chart(xvalues,yvalues):
    # 繪製折線圖,c顏色設定,alpha透明度
    plt.plot(xvalues,yvalues,linewidth=10,alpha=0.5,c='red'# num_squares資料值,linewidth設定線條粗細

    # 設定折線圖示題和橫縱坐標標題
    plt.title("Python繪製折線圖",fontsize=30,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('縱坐標',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',labelsize=14)

    # 顯示圖形
    plt.show()


def scatter_chart(xvalues,yvalues):
    # 繪製散點圖,s設定點的大小,c資料點的顏色,edgecolors資料點的輪廓
    plt.scatter(xvalues,yvalues,c='green',edgecolors='none',s=40)

    # 設定散點圖示題和橫縱坐標標題
    plt.title("Python繪製折線圖",fontsize=30,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('縱坐標',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',which='major',labelsize=10)

    # 設定每個坐標軸取值範圍
    plt.axis([80,100,6400,10000])

    # 顯示圖形
    plt.show()

    # 自動儲存圖表,bbox_inches剪除圖片空白區
    # plt.savefig('squares_plot.png',bbox_inches='tight')


def histogram(xvalues,yvalues):
    # 繪製直方圖
    hist = pygal.Bar()

    # 設定散點圖示題和橫縱坐標標題
    hist.title = '事件頻率的直方圖'
    hist.x_title = '事件的結果'
    hist.y_title = '事件的頻率'

    # 繪製氣溫圖,設定圖形大小
    fig = plt.figure(dpi=128,figsize=(10,6))

    # 事件的結果
    hist.x_labels = xvalues

    # 事件的統計頻率
    hist.add('事件',yvalues)

    # 儲存檔案路徑
    hist.render_to_file('die_visual.svg')

def temper_char():
    dates,highs,lows = [],[],[]
    with open(r'../../../AllProject/PyProject/weather07.csv'as f:
        reader = csv.reader(f)
        essay-header_row = next(reader) # 傳回檔案第一行
        # enumerate 獲取元素的索引及其值
        # for index,column_essay-header in enumerate(essay-header_row):
        #     print(index,column_essay-header)
        for row in reader:
            current_date = datetime.strptime(row[0],"%Y-%m-%d")
            dates.append(current_date)
            highs.append(int(row[1]))
            lows.append((int(row[3])))


    # 接收資料並繪製圖形,facecolor填充區域顏色
    plt.plot(dates,highs,c='red',linewidth=4,alpha=0.5)
    plt.plot(dates,lows,c='green',linewidth=4,alpha=0.5)
    plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)

    # 設定散點圖示題和橫縱坐標標題
    plt.title("日常最高氣溫,2018年7月",fontsize=24,fontname='宋體',fontproperties=myfont)
    plt.xlabel('橫坐標',fontsize=20,fontname='宋體',fontproperties=myfont)
    plt.ylabel('溫度',fontsize=20,fontname='宋體',fontproperties=myfont)

    # 繪製斜的日期
    fig.autofmt_xdate()

    # 設定刻度標記大小,axis='both'引數影響橫縱坐標,labelsize刻度大小
    plt.tick_params(axis='both',which='major',labelsize=15)

    # 顯示圖形
    plt.show()


def repos_hist():
    #檢視API速率限制
    # url = https://api.github.com/rate_limit
    # 執行github API呼叫並儲存響應
    url = 'https://api.github.com/search/repositories?q=language:python&sort;=stars'
    r = requests.get(url)
    print("Status code:",r.status_code) # 狀態碼200表示成功

    # 將API響應儲存在一個變數裡面
    response_dict = r.json()
    print("Hithub總的Python倉庫數:",response_dict['total_count'])

    # 探索有關倉庫的資訊
    repo_dicts = response_dict['items']

    names,stars = [],[]
    for repo_dict in repo_dicts:
        names.append(repo_dict['name'])
        stars.append(repo_dict['stargazers_count'])

    # 視覺化,x_label_rotation圍繞x軸旋轉45度,show_legend圖例隱藏與否
    my_style = LS(base_style=LCS)

    my_config = pygal.Config()
    my_config.x_label_rotation=45 # 橫坐標字型旋轉角度
    my_config.show_legend=False
    my_config.title_font_size=24 # 標題大小
    my_config.label_font_size=14 # 副標題大小,縱橫坐標資料
    my_config.major_label_font_size = 18 # 主標簽大小,縱坐標5000整數倍
    my_config.truncate_label=15  # 專案名稱顯示前15個字
    my_config.show_y_guides=False # 隱藏水平線
    my_config.width=1200 # 自定義寬度
    # chart = pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)
    chart = pygal.Bar(my_config,style=my_style)
    chart.title = 'Github最受歡迎的星標專案'
    chart.x_labels = names
    chart.add('星標',stars)
    chart.render_to_file('python_repos.svg')

    # print('檢視每個python倉庫的資訊:\n')
    # for repo_dict in repo_dicts:
    #     print('專案名稱:',repo_dict['name'])
    #     print('所有者:',repo_dict['owner']['login'])
    #     print('星級評分:',repo_dict['stargazers_count'])
    #     print('專案URL:',repo_dict['html_url'])
    #     print('倉庫描述:',repo_dict['description'])
    #     print('\n')

    # 研究第一個倉庫
    # repo_dict = repo_dicts[0]
    # print('\nKey:',len(repo_dict))
    # for key in sorted(repo_dict.keys()):
    #     print(key)
    # 處理結果
    # print(response_dict.keys())



if __name__ == '__main__':
    xvalues = list(range(1,100)) #校正坐標點,即橫坐標值串列
    yvalues = [x**2 for x in xvalues] # 縱坐標值串列

    x_result = [1,2,3,4,5,6]
    y_frequencies = [152,171,175,168,150,179]

    # line_chart(xvalues,yvalues)
    # scatter_chart(xvalues,yvalues)
    # histogram(x_result,y_frequencies)
    # temper_char()
    repos_hist()

Numpy主要操作 

import numpy
from numpy import array
from numpy import mat,matrix
from numpy import shape  # 檢視矩陣或陣列的方法
from numpy import multiply # 元素相乘
import random


def nu_add():
    mm = array((1,1,1))
    pp = array((2,2,2))
    rr = mm + pp**3     # 陣列的和運算
    rr1 = mm * pp       # 陣列相乘
    print(rr)
    print(rr1)


def nu_matrix():
    ss = mat([1,2,3])     # 矩陣
    mm = matrix([1,2,3])
    print('an element: '.title()+str(mm[0,0]))   # 訪問矩陣中的單個元素
    print('Number of dimensions of mm '.title()+str(shape(mm)))
    print('mat is equal matrix: '.title()+str(ss==mm))
    print('Matrix multiplication: '.title()+str(ss*mm.T))   # 矩陣相乘需要進行轉置
    print('Multiplication of elements: '.title()+str(multiply(mm,ss))) # mm每個元素和ss每個元素相乘


def nu_list_mat():
    pylist = [1,2,3]
    rr = mat(pylist) # 串列轉化成矩陣
    print('list values: '.title()+str(pylist))
    print('rr type: '.title()+str(type(rr)))
    print('mat values: '.title()+str(rr))


def nu_mean():
    dd = mat([4,5,1])
    rr = dd.mean()           # 矩陣的均值
    print('mean of dd: '.title()+ str(rr))


def nu_mul_array():
    jj = mat([[1,2,3],[8,8,8]])
    print('Number of dimensions of jj '.title()+str(shape(jj)))
    one_row = jj[1,0:2]
    print(one_row)

def nu_tran_mat():    # 矩陣轉置
    radMat = numpy.random.random((3,3))
    print('Before matrix transposition:\n '+str(radMat))
    print('After matrix transposition:\n '+str(radMat.T))


def nu_inverse_mat():    # 矩陣的逆
    radMat = numpy.random.random((3,3))
    print('Before matrix inverse:\n '+str(radMat))
    print('After matrix inverse:\n '+str(mat(radMat).I))


def nu_mat_mul_imat(): # 矩陣與其逆矩陣相乘
    bmat = mat(numpy.random.random((3,3)))
    imat = bmat.I
    rus  = bmat * imat
    print(rus) # 結果是3*3的單位矩陣,其位置原則應該都是0,實際中是非常小的數,這個計算機處理的問題



if __name__ == '__main__':
    # nu_add()
    # nu_matrix()
    # nu_list_mat()
    # nu_mean()
    # nu_mul_array()
    # nu_tran_mat()
    # nu_inverse_mat()
    nu_mat_mul_imat()

作者:白寧超

源自:

http://www.cnblogs.com/baiboy/p/pythonnotes1.html

贊(0)

分享創造快樂