摘要:在閱讀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