70個注意的Python小Notes

伏草惟存發表於2018-07-09

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

作者:白寧超

2018年7月9日10:58:18

摘要:在閱讀python相關書籍中,對其進行簡單的筆記紀要。旨在注意一些細節問題,在今後專案中靈活運用,並對部分小notes進行程式碼標註。本文原創,轉載註明出處Python讀書筆記:70個注意的小Notes  )

《Python讀書筆記》

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 :	`+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)
        header_row = next(reader) # 返回檔案第一行
        # enumerate 獲取元素的索引及其值
        # for index,column_header in enumerate(header_row):
        #     print(index,column_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)
        header_row = next(reader) # 返回檔案第一行
        # enumerate 獲取元素的索引及其值
        # for index,column_header in enumerate(header_row):
        #     print(index,column_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倉庫的資訊:
`)
    # 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(`
`)

    # 研究第一個倉庫
    # repo_dict = repo_dicts[0]
    # print(`
Key:`,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:
 `+str(radMat))
    print(`After matrix transposition:
 `+str(radMat.T))


def nu_inverse_mat():    # 矩陣的逆
    radMat = numpy.random.random((3,3))
    print(`Before matrix inverse:
 `+str(radMat))
    print(`After matrix inverse:
 `+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


相關文章