python函数五要素_Python---基本掌握要素(《Python编程从入门到实践》)
這里主要是常見的元素,主要是為了方便查找。所以舉的例子都是一些最簡單的形式,重在舉一反三。希望對大家有用。
-------------------------------基礎篇--------------------------------------------------------
1.列表
1)創建列表。列表里面可以存放任何元素,元素之間沒有關系。用[ ]號表示列表。
bycyles=['trek','connondale']
print(bycycles)
2)訪問列表元素。通過指定索引即可查找相應的元素。下表從0開始。
print(bycycles[0])
小技巧:訪問最后一個元素使用-1索引,即 bycycles[-1],其他類推,-2 為倒數第二個元素。
3)修改列表元素。指定索引即可修改響應元素。
bycycles[0]='mobile'
4)添加列表元素。在末尾添加用append函數;在指定位置插入元素,使用insert函數,通過指定索引
bycycles.append('bike')
bycycles.insert(0,'car')#即第一個元素變為car
5)刪除元素。使用del函數,指定刪除元素的索引。如果你想在刪除后,知道刪除元素的值,則使用pop函數,如果不加參數,則是刪除列表中的最后一個元素,也可指定索引值刪除指定位置的元素,并返回元素的信息。如果你不確定刪除元素的索引,只知道刪除元素的值,則使用remove函數
注意:remove只會刪除第一個出現該值的元素,如果想刪除所有的值,則用循環語句。
bycycles.del(0)
var last = bycycles.pop()#刪除最后一輛車的名稱,并返回刪除元素的值
var first = bycycles.pop(0)
bycycles.remove('bike')
6)對列表永久性排序,即不能返回排序前的順序。使用sort函數。如果按照字母從小到大,則可以不傳參數,如果想要從大到小,則傳入參數reverse=True;如果不想永久性,而想要臨時性,則可以使用sorted函數,用法和sort一樣,但是原始列表的順序未變。
bycycles.sort()
bycycles.sort(reverse=True)
bycycles.sorted()
bycycles.sorted(reverse=True)
7)反轉列表元素。使用reverse函數即可。該函數也是永久性,但是只要reverse一下,又可以恢復原樣呀!
bycycles.reverse()
8)元素長度。使用len函數
len(bycycles)
2. 列表操作
1)for循環。
for bycycle in bycycles:
print(bycycle)#注意縮進,python 遵守縮進原則。當你輸入此句,回車時系統會自動給你帶上縮進效果。相當于花括號效果。{}
2)range函數。注意range的第二個參數不包含在生成的數。按順序生成一系列數字。
range(1,5)#生成1-4的四個數字,沒有5.
range(5)#默認從0開始,生成0-4的五個數字。
3)使用list函數,可將range 生成的數字變成數字列表。
numbers = list(range(1,5))#list使range類對象轉變為list形式
range(2,11,2)#第三個參數為步長。
4)統計函數。max、min、sum函數
max(numbers)
min(numbers)
sum(numbers)
比較簡單的表示形式,確實是創造了一個列表,1到10的平方的列表。說不定你要讀這種代碼。
squares = [ for value**2 in range(2,11,2)]# 兩個*代表乘方運算。
5)切片操作。與matlab 相似,利用 : 來代表數值范圍。
squares[:4]#該: 后面的和range函數的第二個參數具有相同的含義,該語句索引值為0-
#3。
squares[-3:]#指倒數三個數值。
6)切片復制。變量具有c語言的特點,利用切片可以生成一個新的空間,如果使用賦值語句,則會公用一個存儲空間,達不到復制的效果。
squares_part = squares[:3]#創建一個新的空間,名稱為squares_part
squares_part2 = squares#不創建空間,與squares公用一個空間,只是該空間有第二個名字。
3 元組
元組相對于列表就變得約束,基本認為元組內的數值一般保持不變,當通過索引值修改元組的某個元素,則會出現報錯,但是可以重新對元組名指定新值,即也就是換了另一個元組。元組主要是為了對于不能更改的內容,防止誤操作。其基本內容與list相同,只是list創建時使用[ ]賦值,而元組創建時使用()。而訪問的時候都使用[ 索引值 ]進行訪問。此處不再重復。
小標準:縮進符號=4個空格
4 if語句與for 語句相似,需要帶有:,需要帶有縮進,elif 與 c語言中的else if 用法相同,記得帶:喲
if car == 'bike':
print('I like to ride a bike')
else :
print("I don't like other ways")
1)常見的操作符號。and 、or, 與其他語言相同,是“與”、“或”操作。檢查元素是否在某列表中使用in,其實在for中已經使用。如果檢查某元素不在該列表使用not in。可以使用
if bycycles: 當列表bycycles有一個元素,則為True,如果為空表,則為False。
5 字典
字典是鍵值對形式,key:value,創建字典使用{},字典不同列表和元組,它可以使用key值進行讀取相應的值。
alien_0 = {'color':'green','points':5}
alien_0['color']
1)添加字典元素。直接指定key和value
alien_0['x_position']=0
2 )刪除字典元素。使用del函數
del alien_0['x_position']
3)遍歷各種形式的的鍵、值 。函數返回的列表類型哦!
for key,value in alien_0.items():#第一個是鍵,第二個是值
print("\nKey:" + key)#print自帶回車效果喲
print("Value:" + value)
for key in alien_0.keys():#遍歷字典中的鍵。
print("\nKey:" + key)#print自帶回車效果喲
for value in alien_0.values():#遍歷字典中的鍵。
print("\nValue:" + value)#print自帶回車效果喲
4)如果想讓values返回的列表不出現重復數據,則需要使用集合set函數。
for value in set(alien_0.values()):#遍歷字典中的鍵。
print("\nValue:" + value)#print自帶回車效果喲
5)字典和列表可以嵌套,當字典的值為多個,即一對多,則可以使用列表類型。
6 用戶輸入和while循環
input 在Python2.7有問題,可以使用raw_input( ),而input函數只接受合法的表達式,可以將字符串加上引號,使用input。如果單獨輸入一個字符串,會當作變量名使用。
message = input("What do you like?\n")
print(message)
輸入:"You"
輸出:'You'
使用int函數可以將一個數值字符串轉變為數值,在Python2.7中輸入一個數值的話,會默認為數值形式,不需要用int轉換,可能Python需要用該函數。在Python2.7中的raw_input與Python 中的input函數等價,即都返回一個字符串。
2).while循環
i=5
while i<=5:
i+=1
print(i)
break 語句和 continue語句和c語言中的用法相同
7 函數
給出一個最簡單的函數形式
def greet():
"""greet function"""#該段描述主要生成函數文檔使用,作為函數功能的描述
print("Hello")
greet()#調用方式
def greet(username):#此處username稱為形參。
"""greet function"""#該段描述主要生成函數文檔使用,作為函數功能的描述
print("Hello "+username)
greet('byd')#輸出Hello byd,調用時此處的'byd'稱為實參。
1)傳遞實參
總共有兩種傳參方式:位置實參和關鍵字實參。
位置實參就是按照傳入的順序進行賦值。例如上述的greet('byd')
關鍵字實參必須指明形參名稱和實參例如上式 greet(username='byd')只要指明關鍵字,輸入的順序可以不用考慮,但是位置參數則嚴格按照順序賦值。
2)記住順序,參數放置一般為 位置參數靠前放,默認參數第二放,最后放任意數量的或者字典參數
def make_pizza(*pizzas):#接收任意數量的實參,用pizzas空元組接收。
"""打印pizza種類"""
print(pizzas)
make_pizza('pepperoni','green peppers')
def make_pizza(**pizzas):#接收任意數量的關鍵字實參,用pizzas空字典接收。
"""打印pizza種類"""
print(pizzas)
make_pizza(taste='best',meat='more')
此處不詳細講解return,和c語言用法相同。
3)簡單的將函數封裝為模塊,然后在另一個文件import 調用。
第一步創建一個py 模塊文件,如下:
pizza.py
def make_pizza(*pizzas):#接收任意數量的實參,用pizzas空元組接收。
"""打印pizza種類"""
print(pizzas)
創建另一個文件: import_pizza.py
import pizza#pizza.py與import_pizza.py文件放在同一個目錄下,此種引入,調用函數時需指明pizza
pizza.make_pizza('pepperoni','green peppers')
from pizza import make_pizza#pizza.py與import_pizza.py文件放在同一個目錄下,此種引入,調用函數時不能帶著pizza
make_pizza('pepperoni','green peppers')
4)使用as給函數和模塊起別名--當出現重名或者名字太長的函數需要調用時,方便起見,可以將其中一個函數利用as 起一個別名,進行調用
import pizza as p# 此時只能使用p來調用make_pizza 這是模塊起別名
p.make_pizza('pepperoni','green peppers')
from pizza import make_pizza as mp# 此時只能使用p來調用make_pizza 這是函數起別名
mp('pepperoni','green peppers')
from pizza import * # 此處* 指pizza中所有的函數
其實大部分時間,程序員都會將有些數據結構編寫為一些類,以方便理解與調用。
-------------------------------對象篇--------------------------------------------------------
1.創建dog類
class Dog():#括號里沒有object 說明是Python3 版本,如果有則為Python2.7
"""狗類"""
def __init__(self,name,age):
"""初始化屬性name和age"""
self.name = name
self.age = age
self.color = 'black'#當指定默認值時,形參中可以不指明該屬性。
def sit(self):#在類里面的方法形參self不能缺少,而且必須放在首位。self與java中的this有異曲同工之妙。self不需要在調用的時候指明。此處調用使用sit()即可
"""蹲下"""
print(self.name+" is sitting")
my_dog = Dog('peppy',10)#創建實例對象
my_dog.sit()#調用類中方法
my_dog.name#調用屬性
2.繼承---當我們需要在其他類的基礎上稍作改變,則可以利用繼承的思想,減少編寫的代碼量。
1)一個類繼承另一個類時,將獲得該類所有的屬性和方法,被繼承的類為父類,新類為子類。子類需要先給父類創建后再給自己初始化。下面是Python3的寫法,Python2.7有點麻煩,嘿嘿,還是Python3簡單。
class Dog(): #首字母大寫指類
"""狗類"""
def __init__(self,name,age):# init 是特殊的方法,當創建一個對象時,默認首先調用此函數,與java中的構造函數相似。self不需要在調用的時候指明。此處調用使用Dog('peppy',10)即可
"""初始化屬性name和age"""
self.name = name
self.age = age
def sit(self):#在類里面的方法形參self不能缺少,而且必須放在首位。self與java中的this有異曲同工之妙。self不需要在調用的時候指明。此處調用使用sit()即可
"""蹲下"""
print(self.name+" is sitting")
class Peppy(Dog):
"""小萌狗"""
def __init__(self,name,age):
super().__init__(name,age)#使用super()來調用父類
self.grade = 10
def meng(self):#萌數等級
print('萌數等級:'+str(self.grade))
my_peppy = Peppy('byd',5)
my_peppy.sit()#繼承父類所有的函數
3.重寫父類的方法--一定要和父類的方法重名,這要Python知道你要用自己的方法,而舍棄父類的方法
dog.py
class Dog(): #首字母大寫指類
"""狗類"""
def __init__(self,name,age):# init 是特殊的方法,當創建一個對象時,默認首先調用此函數,與java中的構造函數相似。self不需要在調用的時候指明。此處調用使用Dog('peppy',10)即可
"""初始化屬性name和age"""
self.name = name
self.age = age
def sit(self):#在類里面的方法形參self不能缺少,而且必須放在首位。self與java中的this有異曲同工之妙。self不需要在調用的時候指明。此處調用使用sit()即可
"""蹲下"""
print(self.name+" is sitting")
class Peppy(Dog):
"""小萌狗"""
def __init__(self,name,age):
super().__init__(name,age)#使用super()來調用父類
self.grade = 10
def meng(self):#萌數等級
print('萌數等級:'+str(self.grade))
def sit(self):
print('I never sit! I am eating!')
my_peppy = Peppy('byd',5)
print(my_peppy.age)
print(my_peppy.name)
my_peppy.meng()
my_peppy.sit()#重寫父類的函數sit
4.類中的init函數中的屬性也可以是對象實例。通過 self.peppy = Peppy( )即可創建
5.導入類
導入類與導入函數相似,直接寫明導入的類名
from dog import Dog,Peppy
6.類編碼風格
1)類名--每個單詞的首字母大寫,單詞間不需要連接符。比如:MyLove
2) 在類的第二行最好寫"""類的描述語言 """
3)在類中,用一個空行隔開類中的方法,用兩個空行隔開同一個模塊中的兩個類。
4)import語句先導入標準庫,空一行,在import 自己編寫的模塊。
下面兩個是以前整理的一點內容,和上面有重合也有補充。嘿嘿Python 對象篇--參考《從Python開始學編程》?blog.csdn.netPython 資源篇----參考《從Python開始學編程》?blog.csdn.net
-------------------------------文件篇--------------------------------------------------------
1.讀文件時一般喜歡用with...as...函數,該函數會在不需要文件的時候自動關閉文件,相對于手動的open和close,更輕便,避開繁瑣的檢查。主要注意一點是,print自帶換行功能,所以注意編寫代碼時是否需要對讀取的字符串進行刪除空白符的需求。
1)讀取整個文件。read函數
pi_digit.txt
3.1415926535
8979323846
2643383279
file_reader.py
with open('pi_digit.txt') as file_object: #將open的返回值起別名為file_object
contents = file_object.read() #read函數返回值為一個字符串,即將文件所有內容存儲為字符串形式
print(contents) #該方式在顯示時會有一個空行,是因為read讀到文件最后會返回一個空字符串。 處理方法可以改為print(contents.rstrip())該rstrip 就是把右邊的空白符刪掉。
2)逐行讀取
with open('pi_digit.txt') as file_object: #將open的返回值起別名為file_object
for line in file_object:
print(line) #此處會出現多余的空行,因為文件中的換行也會顯示,所有可以使用print(line.rstrip())
3)創建一個包含文件各行內容的列表 readline函數是讀取文件每行內容并存入一個列表中,返回值是一個列表。
with open('pi_digit.txt') as file_object: #將open的返回值起別名為file_object
lines = file_object.readlines()
for line in lines:
print(lines.rstrip())
2. 寫文件用'w',附加文件用 'a', 默認為只讀文件'r',可寫可讀'r+'
with open('pi_digit.txt','w') as file_object: #將open的返回值起別名為file_object
file_object.write("I love programming\n")
3.使用r時,如果文件不存在會報異常,使用w文件不存在會創建該文件再寫入,每次寫入該文件都是先清空再寫入,如果不想清空,可以使用'a'追加的方式進行寫入。
4.異常處理
使用try...except...else結構 對比JAVA try...catch結構,這里的else是和try有關聯的,當try正常運行沒有異常時,會執行else,然后執行else后面的代碼塊。如果出錯,則進入except塊處理,else不會運行。如果沒有except 處理的話,程序會直接中斷,并顯示traceback 報錯信息,如果處理except,程序照樣運行,不會中斷。
try:
answer1 = 5 / 2 #由于程序下一行異常,所以不能執行else,所以只能顯示You can't divide by 0!
answer = 5 / 0
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer1)
5. 有一個關鍵字叫pass。在代碼中表示什么也不做,可以作為一種占位符。
6. json的dump保存和load讀取
import json
alien_0 = {'color': 'green', 'points': 5}
with open('uu.json', 'w') as file_object:
json.dump(alien_0, file_object)
with open('uu.json') as file_object:
content = json.load(file_object)
print(content)
-------------------------------測試用例篇-------------------------------------------------
和JAVA中的JUnit功能相似,在python中使用unittest模塊,下面簡單介紹用法。記住一個用法,是寫入測試的案例和期望的返回值。
1.測試函數
name_function.py 準備測試的模塊
import unittest #導入unittest模塊
class NamesTestCase(unittest.TestCase):#創建一個類,但要繼承unittest.TestCase類
"""測試name_function.py"""
def test_first_laset_name(self): #創建測試方法 名字要以“ test:”_開頭
"""是否正確處理名字"""
formmated_name = get_formatted_name('jan','jop')
self.assertEqual(formmated_name,'Jan Jop') #該函數是檢查兩個參數是否相等
unittest.main() #執行該測試類中的test_開頭的方法
2.測試類
除了上述見到的assertEqual斷言方法,還有下列:
assertNotEqual(a,b)
assertTrue(x)
assertFalse(x)
assertIn(item,list)
assertNotIn(item,list)
測試類時,如果想創建一次類的實例在測試類中加入SetUp方法 ,Python會先運行SetUp方法,然后運行其他test_開頭的方法,SetUp函數相當于平常的init方法
形式為:
def SetUp(self):
self.peppy = Peppy('byd',5)#后面函數中就可以直接用self.peppy.方法名來調用Peppy中的方法。
學習機器學習和深度學習必不可少的就是數據可視化,一方面可以很好的展示研究結果,另一方面可以找到改進的靈感。下面就主要談談數據可視化。
-------------------------------數據可視化篇-------------------------------------------------
1 matlabplotlib
1)漂亮的折線圖 首先可以參照網上的方法加載matplotlib 模塊。
import matplotlib.pyplot as plt #導入pyplot模塊
squars = [1, 4, 9, 16, 25, 36, 49, 91]#plot 默認x坐標的第一個數字為0,如果不符合要求,則需自己設置x的數據
input_values = [1, 2, 3, 4, 5, 6, 7, 8]
plt.plot(input_values, squars,linewidth=5)#顯示折線圖,線寬為5
#設置圖表標題,并給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
#設置刻度標記的大小
plt.tick_params(axis='both', labelsize=14)
plt.show()#顯示繪制的圖片折線圖
2)散點圖scatter
import matplotlib.pyplot as plt #導入pyplot模塊
x_values = list(range(1, 1100))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, s=40, edgecolors='none', c=(0, 0, 0.8) )#顯示散點圖,點大小為100, c='red' c 還可以為rgb 三個分量值,值越接近0越深,越接近1,越淺
#設置圖表標題,并給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.axis([0, 1100, 0, 1100000])
#設置刻度標記的大小
plt.tick_params(axis='both', which='major', labelsize=14)#此處major 指的主刻度線
plt.show()#顯示繪制的圖片
還可以用漸變顏色效果
import matplotlib.pyplot as plt #導入pyplot模塊
x_values = list(range(1, 1100))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, s=40, edgecolors='none', c=y_values, cmap=plt.cm.Blues)
#設置圖表標題,并給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.axis([0, 1100, 0, 1100000])
#設置刻度標記的大小
plt.tick_params(axis='both', which='major', labelsize=14)#此處major 指的主刻度線
plt.show()#顯示繪制的圖片
3)保存圖片
plt.savefig('square.png',bbox_inches='tight')#tight 指將圖表多余的空白區域刪掉。
總結
以上是生活随笔為你收集整理的python函数五要素_Python---基本掌握要素(《Python编程从入门到实践》)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于51单片机红外非接触测温仪阈值报警设
- 下一篇: 明源云预计年亏超7亿元:被花旗下调评级,