我課程中的部分代碼(除沒寫):
在紫陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,紫陽網(wǎng)站建設(shè)費用合理。
def?f_add(a,b):
return?a+b
def?f_mul(a,b):
return?a*b
def?f_sub(a,b):
return?a-b
def?g1(f,a,b):
return?f(a,b)
a,b,c,d?=?1,2,3,4
print?g1(f_sub,?g1(f_mul,?g1(f_add,a,b),?c),?d),??g1(f_mul,?g1(f_add,a,b),?g1(f_sub,c,?d))
對python感興趣可以到這里了解一下:
study.163.com/course/courseMain.htm?courseId=1000035
1、編寫乘法表函數(shù)
def buildMulTable():
for i in range(1, 10):
for j in range(1, i + 1):
print('{}x{}={}\t'.format(j, i, i * j), end='')
print()
buildMulTable()
2、運行結(jié)果
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
可以把類當(dāng)做參數(shù)傳入到函數(shù)里,在函數(shù)里進行實例化。
把類A當(dāng)做參數(shù)傳入get_instance_from_class。在get_instance_from_class中對A進行實例化,獲得其實例,并返回。
class A:
def __init__(self):
print "I am a A instance."
def print_myself(self):
print "print myself."
def main():
def get_instance_from_class(a):
return a()
a = get_instance_from_class(A)
a.print_myself()
if __name__=="__main__":
main()
1. 比較運算符:
如果比較式成立,返回True;不成立,則返回False。
常見的比較運算符如下:
除了簡單的兩值相比之外,比較運算符還支持比較復(fù)雜的比較。
(1)多條件比較:
可以先給變量a賦值,然后做多條件比較。
1 a = 3
2 print(1 a 5)
(2)變量的比較:
給變量a和變量b分別賦值,進行比較。
1 a = 3
2 b = 3
3 print(a != b)
4
5 s1 = 'duwangdan'
6 s2 = 'DuWangDan'
7 print(s1 == s2)
(3)函數(shù)結(jié)果的比較:
1 print(abs(-1) len('duwagndan'))
2 # abs():返回輸入?yún)?shù)的絕對值
在比較運算中有一些需要留意的小問題:
不同類型的對象不能用“、=、、=”進行比較,但可以用“==、!=”做比較。
1 print(21 == len('duwangdan'))
在文章開頭說過,True對應(yīng)的是1,F(xiàn)alse對應(yīng)的是0??聪旅孢@個例子,F(xiàn)alse+True其實相當(dāng)于0+1:
1 print(False + True False + False)
2. 成員運算符:
成員運算符的關(guān)鍵詞是“in”,判斷一個元素是否在某一個列表中。運行如下程序后,可得到反饋結(jié)果。
1 a = 1
2 b = 'beautiful'
3 album = [1,'beautifully',False,7]
4 # 創(chuàng)建列表,命名該列表為album
5 print(a in album)
6 print(b in album
當(dāng)album=[]時,表示該列表為空。
如果想在album中新增內(nèi)容,可以用append方法來實現(xiàn)。新增后,會在列表末尾顯示新增的內(nèi)容。
1 album = [1,'beautifully',False,7]
2 album.append('Wow')
3 # 用append()方法在album中新增內(nèi)容
4 print(album)
3. 身份運算符:
身份運算符是用來比較兩個對象是否是同一個對象,而之前比較運算符中的“==” 則是用來比較兩個對象的值是否相等。
身份運算符主要用“is、is not”來判斷。
1 a = 'duwangdan'
2 b = 'duwangdan'
3 print(a is b)
4 print(a is not b)
4. 布爾運算符:
在Python中有3種布爾運算符:and、or、not。
如下例子,返回結(jié)果分別為:False、True、True。
1 print(1 2 and 1 0)
2 print(1 2 or 1 0)
3 print(not False)
概要等式運算函數(shù)中參數(shù)的定義與調(diào)用定義函數(shù)時*的作用:out定義函數(shù)時:**OUTOUT調(diào)用函數(shù)時,和*均是為了分配參數(shù)用的調(diào)用函數(shù)時:*:調(diào)用函數(shù)時:**:
概要
關(guān)于""和"*"兩個特殊符號的區(qū)別,首先在python中是沒有指針的,與C++有很大的不同。
等式運算
python中常用的乘法運算符*
3*7
21
l=[2 * i for i in range(100) ]
l
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102,
104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198]
函數(shù)中參數(shù)的定義與調(diào)用
如果在定義函數(shù)時,代表收集參數(shù),*代表收集關(guān)鍵字參數(shù)。
定義函數(shù)時*的作用:
def symbols(*params):
print(params)
out
symbols(1,2,3)
(1,2,3)
此時*是將調(diào)用時提供的所有值,放在一個元組里。
這種情況下,在函數(shù)定義時的形參里的*params后面,就最好不要再加入別的形參了,比如你定義成 def symbols(*params,x) ,調(diào)用的時候symbols(1,2,3),就會報錯。因為這樣python分不清哪個數(shù)據(jù)是給params的。如果你非要這么定義也行,不過在調(diào)用的時候,必須顯示的指出哪個值是給x的。比如symbols(1,2,x=3),通過這種方式調(diào)用才不會出錯。
定義函數(shù)時:**
對于之前參數(shù)是*params的情況,symbols并不能傳入關(guān)鍵字參數(shù)。仍然采取這種方式定義時:會報錯
def symbols1(*params):
print(params)
OUT
symbols1(x=1,y=2,z=3)
Traceback (most recent call last):
File "stdin", line 1, in module
TypeError: symbols1() got an unexpected keyword argument 'x'
報錯
因為*號并不會收集關(guān)鍵字參數(shù)。所以需要如下方式修改,采用兩個星號:
def symbols2(**params):
print(params)
這樣調(diào)用symbols2就不會有問題:
OUT
symbols2(x=1,y=2,z=3)
{'z'=3,'x'=1,'y'=2}
以上輸出得到一個字典。字典中元素的先后順序取決于你的環(huán)境。
調(diào)用函數(shù)時,和*均是為了分配參數(shù)用的
調(diào)用函數(shù)時:*:
例如,還是剛剛那個print函數(shù)
def symbols(x,y):
print(x)
print(y)
兩個形參,如果只想傳入一個形參呢
對,“調(diào)用函數(shù)時分配參數(shù)”跟“定義函數(shù)時收集參數(shù)”,反過來了!
假設(shè)你還有一個元組:
params=(1,2)
可以通過如下方式調(diào)用symbols函數(shù):
symbols(*params)
就可以輸出:
1
2
調(diào)用函數(shù)時:**:
和上面*時一樣,只是分配的是字典。
params={'x':1,'y':2}
可以通過如下方式調(diào)用symbols函數(shù):
symbols(**params)
就可以輸出:
1
2
##最小二乘法
import?numpy?as?np???##科學(xué)計算庫?
import?scipy?as?sp???##在numpy基礎(chǔ)上實現(xiàn)的部分算法庫
import?matplotlib.pyplot?as?plt??##繪圖庫
from?scipy.optimize?import?leastsq??##引入最小二乘法算法
'''
設(shè)置樣本數(shù)據(jù),真實數(shù)據(jù)需要在這里處理
'''
##樣本數(shù)據(jù)(Xi,Yi),需要轉(zhuǎn)換成數(shù)組(列表)形式
Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])
Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])
'''
設(shè)定擬合函數(shù)和偏差函數(shù)
函數(shù)的形狀確定過程:
1.先畫樣本圖像
2.根據(jù)樣本圖像大致形狀確定函數(shù)形式(直線、拋物線、正弦余弦等)
'''
##需要擬合的函數(shù)func?:指定函數(shù)的形狀
def?func(p,x):
k,b=p
return?k*x+b
##偏差函數(shù):x,y都是列表:這里的x,y更上面的Xi,Yi中是一一對應(yīng)的
def?error(p,x,y):
return?func(p,x)-y
'''
主要部分:附帶部分說明
1.leastsq函數(shù)的返回值tuple,第一個元素是求解結(jié)果,第二個是求解的代價值(個人理解)
2.官網(wǎng)的原話(第二個值):Value?of?the?cost?function?at?the?solution
3.實例:Para=(array([?0.61349535,??1.79409255]),?3)
4.返回值元組中第一個值的數(shù)量跟需要求解的參數(shù)的數(shù)量一致
'''
#k,b的初始值,可以任意設(shè)定,經(jīng)過幾次試驗,發(fā)現(xiàn)p0的值會影響cost的值:Para[1]
p0=[1,20]
#把error函數(shù)中除了p0以外的參數(shù)打包到args中(使用要求)
Para=leastsq(error,p0,args=(Xi,Yi))
#讀取結(jié)果
k,b=Para[0]
print("k=",k,"b=",b)
print("cost:"+str(Para[1]))
print("求解的擬合直線為:")
print("y="+str(round(k,2))+"x+"+str(round(b,2)))
'''
繪圖,看擬合效果.
matplotlib默認(rèn)不支持中文,label設(shè)置中文的話需要另行設(shè)置
如果報錯,改成英文就可以
'''
#畫樣本點
plt.figure(figsize=(8,6))?##指定圖像比例:?8:6
plt.scatter(Xi,Yi,color="green",label="樣本數(shù)據(jù)",linewidth=2)?
#畫擬合直線
x=np.linspace(0,12,100)?##在0-15直接畫100個連續(xù)點
y=k*x+b?##函數(shù)式
plt.plot(x,y,color="red",label="擬合直線",linewidth=2)?
plt.legend(loc='lower?right')?#繪制圖例
plt.show()