python的用途:
在玉溪等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、做網(wǎng)站 網(wǎng)站設(shè)計制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),玉溪網(wǎng)站建設(shè)費用合理。
python也是一門程序語言。能寫各種各樣的程序。
優(yōu)點:
1.支持OOP編程 從根本
上講Python仍是一種面向?qū)ο蟮恼Z言,支持多態(tài)、繼承等高級概念,在Python里使用OOP十分容易 沒有C++、Java那樣復(fù)雜,但不必做Python下OOp高手,夠用即可。?
2. 免費Python的使用是完全免費的,您可以從網(wǎng)絡(luò)上免費下載、安裝使用, Python上的其他程序包,也可下載安裝使用。 Python的免費的同時又有很多的的社區(qū)對用戶的提問提出快速的技術(shù)支持,學(xué)習(xí)和使用Python技術(shù)不再是一個人在戰(zhàn)斗!
3. 可移植性 Python的實現(xiàn)是用ansi c編寫的,可以運行在目前所有主流平臺上,手機(jī)、pad上均可運行Python程序,其下的程序包也具有可移植性。
4. 功能強大 從特性的觀點上看,Python是一個混合體,他豐富的工具集使得他介于傳統(tǒng)的腳本語言和系統(tǒng)語言之間。
拓展資料:
設(shè)計定位
Python的設(shè)計哲學(xué)是"優(yōu)雅"、"明確"、"簡單"。因此,Perl語言中"總是有多種方法來做同一件事"的理念在Python開發(fā)者中通常是難以忍受的。Python開發(fā)者的哲學(xué)是"用一種方法,最好是只有一種方法來做一件事"。
在設(shè)計Python語言時,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由于這種設(shè)計觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開發(fā)。這些準(zhǔn)則被稱為Python格言。在Python解釋器內(nèi)運行import this可以獲得完整的列表。
Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化。一些針對非重要部位的加快運行速度的補丁通常不會被合并到Python內(nèi)。所以很多人認(rèn)為Python很慢。不過,根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓?。在某些對運行速度要求很高的情況,Python設(shè)計師傾向于使用JIT技術(shù),或者用使用C/C++語言改寫這部分程序??捎玫腏IT技術(shù)是PyPy。
Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復(fù)用性。Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對函數(shù)式設(shè)計只提供了有限的支持。有兩個標(biāo)準(zhǔn)庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具。
雖然Python可能被粗略地分類為"腳本語言"(script language),但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態(tài)編程語言,原因是"腳本語言"泛指僅作簡單程序設(shè)計任務(wù)的語言,如shellscript、VBScript等只能處理簡單任務(wù)的編程語言,并不能與Python相提并論。
Python本身被設(shè)計為可擴(kuò)充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內(nèi)。
因此,很多人還把Python作為一種"膠水語言"(glue language)使用。使用Python將其他語言編寫的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。
最優(yōu)化
為什么要做最優(yōu)化呢?因為在生活中,人們總是希望幸福值或其它達(dá)到一個極值,比如做生意時希望成本最小,收入最大,所以在很多商業(yè)情境中,都會遇到求極值的情況。
函數(shù)求根
這里「函數(shù)的根」也稱「方程的根」,或「函數(shù)的零點」。
先把我們需要的包加載進(jìn)來。import numpy as npimport scipy as spimport scipy.optimize as optimport matplotlib.pyplot as plt%matplotlib inline
函數(shù)求根和最優(yōu)化的關(guān)系?什么時候函數(shù)是最小值或最大值?
兩個問題一起回答:最優(yōu)化就是求函數(shù)的最小值或最大值,同時也是極值,在求一個函數(shù)最小值或最大值時,它所在的位置肯定是導(dǎo)數(shù)為 0 的位置,所以要求一個函數(shù)的極值,必然要先求導(dǎo),使其為 0,所以函數(shù)求根就是為了得到最大值最小值。
scipy.optimize 有什么方法可以求根?
可以用 scipy.optimize 中的 bisect 或 brentq 求根。f = lambda x: np.cos(x) - x # 定義一個匿名函數(shù)x = np.linspace(-5, 5, 1000) # 先生成 1000 個 xy = f(x) # 對應(yīng)生成 1000 個 f(x)plt.plot(x, y); # 看一下這個函數(shù)長什么樣子plt.axhline(0, color='k'); # 畫一根橫線,位置在 y=0
opt.bisect(f, -5, 5) # 求取函數(shù)的根0.7390851332155535plt.plot(x, y)plt.axhline(0, color='k')plt.scatter([_], [0], c='r', s=100); # 這里的 [_] 表示上一個 Cell 中的結(jié)果,這里是 x 軸上的位置,0 是 y 上的位置
求根有兩種方法,除了上面介紹的 bisect,還有 brentq,后者比前者快很多。%timeit opt.bisect(f, -5, 5)%timeit opt.brentq(f, -5, 5)10000 loops, best of 3: 157 s per loopThe slowest run took 11.65 times longer than the fastest. This could mean that an intermediate result is being cached.10000 loops, best of 3: 35.9 s per loop
函數(shù)求最小化
求最小值就是一個最優(yōu)化問題。求最大值時只需對函數(shù)做一個轉(zhuǎn)換,比如加一個負(fù)號,或者取倒數(shù),就可轉(zhuǎn)成求最小值問題。所以兩者是同一問題。
初始值對最優(yōu)化的影響是什么?
舉例來說,先定義個函數(shù)。f = lambda x: 1-np.sin(x)/xx = np.linspace(-20., 20., 1000)y = f(x)
當(dāng)初始值為 3 值,使用 minimize 函數(shù)找到最小值。minimize 函數(shù)是在新版的 scipy 里,取代了以前的很多最優(yōu)化函數(shù),是個通用的接口,背后是很多方法在支撐。x0 = 3xmin = opt.minimize(f, x0).x # x0 是起始點,起始點最好離真正的最小值點不要太遠(yuǎn)plt.plot(x, y)plt.scatter(x0, f(x0), marker='o', s=300); # 起始點畫出來,用圓圈表示plt.scatter(xmin, f(xmin), marker='v', s=300); # 最小值點畫出來,用三角表示plt.xlim(-20, 20);
初始值為 3 時,成功找到最小值。
現(xiàn)在來看看初始值為 10 時,找到的最小值點。x0 = 10xmin = opt.minimize(f, x0).xplt.plot(x, y)plt.scatter(x0, f(x0), marker='o', s=300)plt.scatter(xmin, f(xmin), marker='v', s=300)plt.xlim(-20, 20);
由上圖可見,當(dāng)初始值為 10 時,函數(shù)找到的是局部最小值點,可見 minimize 的默認(rèn)算法對起始點的依賴性。
那么怎么才能不管初始值在哪個位置,都能找到全局最小值點呢?
如何找到全局最優(yōu)點?
可以使用 basinhopping 函數(shù)找到全局最優(yōu)點,相關(guān)背后算法,可以看幫助文件,有提供論文的索引和出處。
我們設(shè)初始值為 10 看是否能找到全局最小值點。x0 = 10from scipy.optimize import basinhoppingxmin = basinhopping(f,x0,stepsize = 5).xplt.plot(x, y);plt.scatter(x0, f(x0), marker='o', s=300);plt.scatter(xmin, f(xmin), marker='v', s=300);plt.xlim(-20, 20);
當(dāng)起始點在比較遠(yuǎn)的位置,依然成功找到了全局最小值點。
如何求多元函數(shù)最小值?
以二元函數(shù)為例,使用 minimize 求對應(yīng)的最小值。def g(X): x,y = X return (x-1)**4 + 5 * (y-1)**2 - 2*x*yX_opt = opt.minimize(g, (8, 3)).x # (8,3) 是起始點print X_opt[ 1.88292611 1.37658521]fig, ax = plt.subplots(figsize=(6, 4)) # 定義畫布和圖形x_ = y_ = np.linspace(-1, 4, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, g((X, Y)), 50) # 等高線圖ax.plot(X_opt[0], X_opt[1], 'r*', markersize=15) # 最小點的位置是個元組ax.set_xlabel(r"$x_1$", fontsize=18)ax.set_ylabel(r"$x_2$", fontsize=18)plt.colorbar(c, ax=ax) # colorbar 表示顏色越深,高度越高fig.tight_layout()
畫3D 圖。from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfig = plt.figure()ax = fig.gca(projection='3d')x_ = y_ = np.linspace(-1, 4, 100)X, Y = np.meshgrid(x_, y_)surf = ax.plot_surface(X, Y, g((X,Y)), rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)cset = ax.contour(X, Y, g((X,Y)), zdir='z',offset=-5, cmap=cm.coolwarm)fig.colorbar(surf, shrink=0.5, aspect=5);
曲線擬合
曲線擬合和最優(yōu)化有什么關(guān)系?
曲線擬合的問題是,給定一組數(shù)據(jù),它可能是沿著一條線散布的,這時要找到一條最優(yōu)的曲線來擬合這些數(shù)據(jù),也就是要找到最好的線來代表這些點,這里的最優(yōu)是指這些點和線之間的距離是最小的,這就是為什么要用最優(yōu)化問題來解決曲線擬合問題。
舉例說明,給一些點,找到一條線,來擬合這些點。
先給定一些點:N = 50 # 點的個數(shù)m_true = 2 # 斜率b_true = -1 # 截距dy = 2.0 # 誤差np.random.seed(0)xdata = 10 * np.random.random(N) # 50 個 x,服從均勻分布ydata = np.random.normal(b_true + m_true * xdata, dy) # dy 是標(biāo)準(zhǔn)差plt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');
上面的點整體上呈現(xiàn)一個線性關(guān)系,要找到一條斜線來代表這些點,這就是經(jīng)典的一元線性回歸。目標(biāo)就是找到最好的線,使點和線的距離最短。要優(yōu)化的函數(shù)是點和線之間的距離,使其最小。點是確定的,而線是可變的,線是由參數(shù)值,斜率和截距決定的,這里就是要通過優(yōu)化距離找到最優(yōu)的斜率和截距。
點和線的距離定義如下:def chi2(theta, x, y): return np.sum(((y - theta[0] - theta[1] * x)) ** 2)
上式就是誤差平方和。
誤差平方和是什么?有什么作用?
誤差平方和公式為:
誤差平方和大,表示真實的點和預(yù)測的線之間距離太遠(yuǎn),說明擬合得不好,最好的線,應(yīng)該是使誤差平方和最小,即最優(yōu)的擬合線,這里是條直線。
誤差平方和就是要最小化的目標(biāo)函數(shù)。
找到最優(yōu)的函數(shù),即斜率和截距。theta_guess = [0, 1] # 初始值theta_best = opt.minimize(chi2, theta_guess, args=(xdata, ydata)).xprint(theta_best)[-1.01442005 1.93854656]
上面兩個輸出即是預(yù)測的直線斜率和截距,我們是根據(jù)點來反推直線的斜率和截距,那么真實的斜率和截距是多少呢?-1 和 2,很接近了,差的一點是因為有噪音的引入。xfit = np.linspace(0, 10)yfit = theta_best[0] + theta_best[1] * xfitplt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');plt.plot(xfit, yfit, '-k');
最小二乘(Least Square)是什么?
上面用的是 minimize 方法,這個問題的目標(biāo)函數(shù)是誤差平方和,這就又有一個特定的解法,即最小二乘。
最小二乘的思想就是要使得觀測點和估計點的距離的平方和達(dá)到最小,這里的“二乘”指的是用平方來度量觀測點與估計點的遠(yuǎn)近(在古漢語中“平方”稱為“二乘”),“最小”指的是參數(shù)的估計值要保證各個觀測點與估計點的距離的平方和達(dá)到最小。
關(guān)于最小二乘估計的計算,涉及更多的數(shù)學(xué)知識,這里不想詳述,其一般的過程是用目標(biāo)函數(shù)對各參數(shù)求偏導(dǎo)數(shù),并令其等于 0,得到一個線性方程組。具體推導(dǎo)過程可參考斯坦福機(jī)器學(xué)習(xí)講義 第 7 頁。def deviations(theta, x, y): return (y - theta[0] - theta[1] * x)theta_best, ier = opt.leastsq(deviations, theta_guess, args=(xdata, ydata))print(theta_best)[-1.01442016 1.93854659]
最小二乘 leastsq 的結(jié)果跟 minimize 結(jié)果一樣。注意 leastsq 的第一個參數(shù)不再是誤差平方和 chi2,而是誤差本身 deviations,即沒有平方,也沒有和。yfit = theta_best[0] + theta_best[1] * xfitplt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');plt.plot(xfit, yfit, '-k');
非線性最小二乘
上面是給一些點,擬合一條直線,擬合一條曲線也是一樣的。def f(x, beta0, beta1, beta2): # 首先定義一個非線性函數(shù),有 3 個參數(shù) return beta0 + beta1 * np.exp(-beta2 * x**2)beta = (0.25, 0.75, 0.5) # 先猜 3 個 betaxdata = np.linspace(0, 5, 50)y = f(xdata, *beta)ydata = y + 0.05 * np.random.randn(len(xdata)) # 給 y 加噪音def g(beta): return ydata - f(xdata, *beta) # 真實 y 和 預(yù)測值的差,求最優(yōu)曲線時要用到beta_start = (1, 1, 1)beta_opt, beta_cov = opt.leastsq(g, beta_start)print beta_opt # 求到的 3 個最優(yōu)的 beta 值[ 0.25525709 0.74270226 0.54966466]
拿估計的 beta_opt 值跟真實的 beta = (0.25, 0.75, 0.5) 值比較,差不多。fig, ax = plt.subplots()ax.scatter(xdata, ydata) # 畫點ax.plot(xdata, y, 'r', lw=2) # 真實值的線ax.plot(xdata, f(xdata, *beta_opt), 'b', lw=2) # 擬合的線ax.set_xlim(0, 5)ax.set_xlabel(r"$x$", fontsize=18)ax.set_ylabel(r"$f(x, \beta)$", fontsize=18)fig.tight_layout()
除了使用最小二乘,還可以使用曲線擬合的方法,得到的結(jié)果是一樣的。beta_opt, beta_cov = opt.curve_fit(f, xdata, ydata)print beta_opt[ 0.25525709 0.74270226 0.54966466]
有約束的最小化
有約束的最小化是指,要求函數(shù)最小化之外,還要滿足約束條件,舉例說明。
邊界約束def f(X): x, y = X return (x-1)**2 + (y-1)**2 # 這是一個碗狀的函數(shù)x_opt = opt.minimize(f, (0, 0), method='BFGS').x # 無約束最優(yōu)化
假設(shè)有約束條件,x 和 y 要在一定的范圍內(nèi),如 x 在 2 到 3 之間,y 在 0 和 2 之間。bnd_x1, bnd_x2 = (2, 3), (0, 2) # 對自變量的約束x_cons_opt = opt.minimize(f, np.array([0, 0]), method='L-BFGS-B', bounds=[bnd_x1, bnd_x2]).x # bounds 矩形約束fig, ax = plt.subplots(figsize=(6, 4))x_ = y_ = np.linspace(-1, 3, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, f((X,Y)), 50)ax.plot(x_opt[0], x_opt[1], 'b*', markersize=15) # 沒有約束下的最小值,藍(lán)色五角星ax.plot(x_cons_opt[0], x_cons_opt[1], 'r*', markersize=15) # 有約束下的最小值,紅色星星bound_rect = plt.Rectangle((bnd_x1[0], bnd_x2[0]), bnd_x1[1] - bnd_x1[0], bnd_x2[1] - bnd_x2[0], facecolor="grey")ax.add_patch(bound_rect)ax.set_xlabel(r"$x_1$", fontsize=18)ax.set_ylabel(r"$x_2$", fontsize=18)plt.colorbar(c, ax=ax)fig.tight_layout()
不等式約束
介紹下相關(guān)理論,先來看下存在等式約束的極值問題求法,比如下面的優(yōu)化問題。
目標(biāo)函數(shù)是 f(w),下面是等式約束,通常解法是引入拉格朗日算子,這里使用 ββ 來表示算子,得到拉格朗日公式為
l 是等式約束的個數(shù)。
然后分別對 w 和ββ 求偏導(dǎo),使得偏導(dǎo)數(shù)等于 0,然后解出 w 和βiβi,至于為什么引入拉格朗日算子可以求出極值,原因是 f(w) 的 dw 變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時才能獲得極值,而且在極值處,f(w) 的梯度與其他等式梯度的線性組合平行,因此他們之間存在線性關(guān)系。(參考《最優(yōu)化與KKT條件》)
對于不等式約束的極值問題
常常利用拉格朗日對偶性將原始問題轉(zhuǎn)換為對偶問題,通過解對偶問題而得到原始問題的解。該方法應(yīng)用在許多統(tǒng)計學(xué)習(xí)方法中。有興趣的可以參閱相關(guān)資料,這里不再贅述。def f(X): return (X[0] - 1)**2 + (X[1] - 1)**2def g(X): return X[1] - 1.75 - (X[0] - 0.75)**4x_opt = opt.minimize(f, (0, 0), method='BFGS').xconstraints = [dict(type='ineq', fun=g)] # 約束采用字典定義,約束方式為不等式約束,邊界用 g 表示x_cons_opt = opt.minimize(f, (0, 0), method='SLSQP', constraints=constraints).xfig, ax = plt.subplots(figsize=(6, 4))x_ = y_ = np.linspace(-1, 3, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, f((X, Y)), 50)ax.plot(x_opt[0], x_opt[1], 'b*', markersize=15) # 藍(lán)色星星,沒有約束下的最小值ax.plot(x_, 1.75 + (x_-0.75)**4, '', markersize=15)ax.fill_between(x_, 1.75 + (x_-0.75)**4, 3, color="grey")ax.plot(x_cons_opt[0], x_cons_opt[1], 'r*', markersize=15) # 在區(qū)域約束下的最小值ax.set_ylim(-1, 3)ax.set_xlabel(r"$x_0$", fontsize=18)ax.set_ylabel(r"$x_1$", fontsize=18)plt.colorbar(c, ax=ax)fig.tight_layout()
scipy.optimize.minimize 中包括了多種最優(yōu)化算法,每種算法使用范圍不同,詳細(xì)參考官方文檔。
python既可用于前端還可用于后端開發(fā)。
Python是一種計算機(jī)程序設(shè)計語言。是一種動態(tài)的、面向?qū)ο蟮哪_本語言,最初被設(shè)計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發(fā)。
Python在設(shè)計上堅持了清晰劃一的風(fēng)格,這使得Python成為一門易讀、易維護(hù),并且被大量用戶所歡迎的、用途廣泛的語言。
設(shè)計者開發(fā)時總的指導(dǎo)思想是,對于一個特定的問題,只要有一種最好的方法來解決就好了。
這在由Tim Peters寫的Python格言(稱為The Zen of Python)里面表述為:There should be one-- and preferably only one --obvious way to do it。
這正好和Perl語言(另一種功能類似的高級動態(tài)語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
擴(kuò)展資料:
Python的設(shè)計定位:
Python的設(shè)計哲學(xué)是“優(yōu)雅”、“明確”、“簡單”。因此,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發(fā)者中通常是難以忍受的。
Python開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來做一件事”。在設(shè)計Python語言時,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。
由于這種設(shè)計觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開發(fā)。這些準(zhǔn)則被稱為Python格言。在Python解釋器內(nèi)運行import this可以獲得完整的列表。
Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化。一些針對非重要部位的加快運行速度的補丁通常不會被合并到Python內(nèi)。
所以很多人認(rèn)為Python很慢。不過,根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓?。在某些對運行速度要求很高的情況,Python設(shè)計師傾向于使用JIT技術(shù),或者用使用C/C++語言改寫這部分程序。可用的JIT技術(shù)是PyPy。
Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復(fù)用性。
Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對函數(shù)式設(shè)計只提供了有限的支持。有兩個標(biāo)準(zhǔn)庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具。
雖然Python可能被粗略地分類為“腳本語言”(script language),但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。
Python的支持者較喜歡稱它為一種高級動態(tài)編程語言,原因是“腳本語言”泛指僅作簡單程序設(shè)計任務(wù)的語言,如shellscript、VBScript等只能處理簡單任務(wù)的編程語言,并不能與Python相提并論。
參考資料來源:搜狗百科-Python
python函數(shù)的作用是:
1、函數(shù)其實是把某個功能的代碼封裝到一個代碼塊中,用來為某個重復(fù)使用的功能做調(diào)用的一個代碼塊,可以稱為一個函數(shù)的代碼封裝??梢栽谧远x函數(shù)的小括號中傳入多個參數(shù)。
2、形參:在定義函數(shù)時,小括號中的參數(shù)名稱。實參:在函數(shù)名稱的小括號中,傳入實際的值代替了形參的這個值。函數(shù)可以有返回值(使用return進(jìn)行返回),也可以沒有返回值。
3、形參可以當(dāng)做函數(shù)內(nèi)部的一個變量使用,往往只在函數(shù)內(nèi)部進(jìn)行使用,不影響函數(shù)外部的相同名稱的變量。
4、在函數(shù)內(nèi)部可以返回某個值。直接在函數(shù)內(nèi)部退出來,而不再繼續(xù)執(zhí)行函數(shù)下面的代碼。
更多關(guān)于python函數(shù)的作用,進(jìn)入:查看更多內(nèi)容
def do_POST(self):
mpath,margs=urllib.splitquery(self.path)
datas = self.rfile.read(int(self.headers['content-length']))
self.do_action(mpath, datas)
def do_action(self, path, args):
self.outputtxt(path + args )
def outputtxt(self, content):
#指定返回編碼
enc = "UTF-8"
content = content.encode(enc)
f = io.BytesIO()
f.write(content)
f.seek(0)
self.send_response(200)
self.send_header("Content-type", "text/html; charset=%s" % enc)
self.send_header("Content-Length", str(len(content)))
self.end_headers()
shutil.copyfileobj(f,self.wfile)