樓主你好!

創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站設(shè)計(jì)公司,創(chuàng)新互聯(lián)依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷推廣及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!
看你的代碼存在很多問(wèn)題,一個(gè)個(gè)來(lái)說(shuō)明
1)首先你代碼的報(bào)錯(cuò)源于你想用list來(lái)展開(kāi)你的SLinkedList類,在python中,除非內(nèi)置的可迭代對(duì)象外,其他都需要實(shí)現(xiàn)__iter__()函數(shù),才能用list來(lái)進(jìn)行展開(kāi)。注意:判斷一個(gè)對(duì)象是否可迭代,請(qǐng)使用isinstance(obj, Iterable)來(lái)判斷obj是不是可以迭代,Iterable需要從collections中導(dǎo)入
2)插入的方法存在嚴(yán)重問(wèn)題,按樓主的方法插入的話,因?yàn)轭^節(jié)點(diǎn)始終在變,所以當(dāng)你需要遍歷鏈表的時(shí)候就會(huì)找不到頭節(jié)點(diǎn);
3)pop的方法實(shí)現(xiàn)也有問(wèn)題,因?yàn)槭菃蜗蜴湥詿o(wú)法從末節(jié)點(diǎn)開(kāi)始刪除,只能刪除頭節(jié)點(diǎn)
4)top方法的意圖未知
其他:
下面列舉了一下我修改后的方案,做了一些錦上添花的操作,每個(gè)基本操作都會(huì)返回鏈表對(duì)象,這樣就可以使用鏈?zhǔn)讲僮鱽?lái)寫(xiě)代碼;迭代函數(shù)使用yield來(lái)實(shí)現(xiàn),避免展開(kāi)時(shí)占用不必要的內(nèi)存。
另:我的展開(kāi)時(shí)直接取鏈表中各個(gè)節(jié)點(diǎn)的元素,加了一些關(guān)鍵注釋在代碼中;
#?-*-?coding:?utf-8?-*-
class?Node:
def?__init__(self):
'''
elm:節(jié)點(diǎn)元素
nxt:下個(gè)節(jié)點(diǎn)指針
'''
self.elm,?self.nxt?=?None,?None
class?SLinkedList:
def?__init__(self):
'''
head:?鏈表頭
end_point:?鏈表尾
'''
self.head??????=?None
self.end_point?=?None
def?push(self,?x):
p?=?Node()
p.elm?=?x
if?self.head?is?None:
self.head??????=?p
self.end_point?=?p
return?self
self.end_point.nxt?=?p
self.end_point?????=?p
return?self
def?pop(self):
'''因?yàn)閷?shí)現(xiàn)的是一個(gè)單鏈表,所以只能從頭開(kāi)始刪除節(jié)點(diǎn)'''
if?self.head.nxt?is?None:
return
self.head?=?self.head.nxt
return?self
def?__iter__(self):
temp_node?=?self.head
while?temp_node?is?not?None:
yield?temp_node.elm
temp_node?=?temp_node.nxt
if?__name__?==?'__main__':
'''增加1,2,5三個(gè)元素,并刪除一個(gè)頭節(jié)點(diǎn)'''
mylinklist?=?SLinkedList().push(1).push(2).push(5).pop()
print(list(mylinklist))
其實(shí)python這個(gè)語(yǔ)言使用鏈表有些畫(huà)蛇添足,但是如果拿來(lái)當(dāng)作需求練手也無(wú)妨。
望采納,謝謝!
python中快速進(jìn)行多個(gè)字符替換的方法小結(jié)
先給出結(jié)論:
要替換的字符數(shù)量不多時(shí),可以直接鏈?zhǔn)絩eplace()方法進(jìn)行替換,效率非常高;
如果要替換的字符數(shù)量較多,則推薦在 for 循環(huán)中調(diào)用?replace()?進(jìn)行替換。
可行的方法:
1. 鏈?zhǔn)絩eplace()
?
1? ?string.replace().replace()? ?
1.x 在for循環(huán)中調(diào)用replace()?「在要替換的字符較多時(shí)」
2. 使用string.maketrans
3. 先 re.compile 然后 re.sub
從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)
動(dòng)機(jī):為了更加深入的理解深度學(xué)習(xí),我們將使用 python 語(yǔ)言從頭搭建一個(gè)神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認(rèn)為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對(duì)數(shù)據(jù)科學(xué)家來(lái)說(shuō)至關(guān)重要。
這篇文章的內(nèi)容是我的所學(xué),希望也能對(duì)你有所幫助。
神經(jīng)網(wǎng)絡(luò)是什么?
介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會(huì)將它和大腦進(jìn)行類比。如果你沒(méi)有深入研究過(guò)大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學(xué)關(guān)系會(huì)更容易理解。
神經(jīng)網(wǎng)絡(luò)包括以下組成部分
? 一個(gè)輸入層,x
? 任意數(shù)量的隱藏層
? 一個(gè)輸出層,?
? 每層之間有一組權(quán)值和偏置,W and b
? 為隱藏層選擇一種激活函數(shù),σ。在教程中我們使用 Sigmoid 激活函數(shù)
下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(注意:我們?cè)谟?jì)算網(wǎng)絡(luò)層數(shù)時(shí)通常排除輸入層)
2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
用 Python 可以很容易的構(gòu)建神經(jīng)網(wǎng)絡(luò)類
訓(xùn)練神經(jīng)網(wǎng)絡(luò)
這個(gè)網(wǎng)絡(luò)的輸出 ? 為:
你可能會(huì)注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。
因此 W 和 b 的值影響預(yù)測(cè)的準(zhǔn)確率. 所以根據(jù)輸入數(shù)據(jù)對(duì) W 和 b 調(diào)優(yōu)的過(guò)程就被成為訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
每步訓(xùn)練迭代包含以下兩個(gè)部分:
? 計(jì)算預(yù)測(cè)結(jié)果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個(gè)過(guò)程:
前向傳播
正如我們?cè)谏蠄D中看到的,前向傳播只是簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層網(wǎng)絡(luò)來(lái)說(shuō),它的輸出是這樣的:
我們?cè)?NeuralNetwork 類中增加一個(gè)計(jì)算前向傳播的函數(shù)。為了簡(jiǎn)單起見(jiàn)我們假設(shè)偏置 b 為0:
但是我們還需要一個(gè)方法來(lái)評(píng)估預(yù)測(cè)結(jié)果的好壞(即預(yù)測(cè)值和真實(shí)值的誤差)。這就要用到損失函數(shù)。
損失函數(shù)
常用的損失函數(shù)有很多種,根據(jù)模型的需求來(lái)選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。
誤差平方和是求每個(gè)預(yù)測(cè)值和真實(shí)值之間的誤差再求和,這個(gè)誤差是他們的差值求平方以便我們觀察誤差的絕對(duì)值。
訓(xùn)練的目標(biāo)是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測(cè)值和真實(shí)值之間的距離最小。
反向傳播
我們已經(jīng)度量出了預(yù)測(cè)的誤差(損失),現(xiàn)在需要找到一種方法來(lái)傳播誤差,并以此更新權(quán)值和偏置。
為了知道如何適當(dāng)?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對(duì)權(quán)值 W 和偏置 b 的導(dǎo)數(shù)。
回想微積分中的概念,函數(shù)的導(dǎo)數(shù)就是函數(shù)的斜率。
梯度下降法
如果我們已經(jīng)求出了導(dǎo)數(shù),我們就可以通過(guò)增加或減少導(dǎo)數(shù)值來(lái)更新權(quán)值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)值和偏置的導(dǎo)數(shù),因?yàn)樵趽p失函數(shù)的等式中并沒(méi)有顯式的包含他們。因此,我們需要運(yùn)用鏈?zhǔn)角髮?dǎo)發(fā)在來(lái)幫助計(jì)算導(dǎo)數(shù)。
鏈?zhǔn)椒▌t用于計(jì)算損失函數(shù)對(duì) W 和 b 的導(dǎo)數(shù)。注意,為了簡(jiǎn)單起見(jiàn)。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。
這雖然很簡(jiǎn)陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對(duì)權(quán)值 W 的導(dǎo)數(shù)(斜率),因此我們可以相應(yīng)的調(diào)整權(quán)值。
現(xiàn)在我們將反向傳播算法的函數(shù)添加到 Python 代碼中
為了更深入的理解微積分原理和反向傳播中的鏈?zhǔn)角髮?dǎo)法則,我強(qiáng)烈推薦 3Blue1Brown 的如下教程:
Youtube:
整合并完成一個(gè)實(shí)例
既然我們已經(jīng)有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應(yīng)用到一個(gè)例子上看看它是如何工作的吧。
神經(jīng)網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)得到函數(shù)的權(quán)重。而我們僅靠觀察是不太可能得到函數(shù)的權(quán)重的。
讓我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會(huì)發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經(jīng)過(guò) 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測(cè)結(jié)果:
經(jīng)過(guò) 1500 次迭代訓(xùn)練后的預(yù)測(cè)結(jié)果
我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓(xùn)練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測(cè)結(jié)果收斂于真實(shí)值。
注意預(yù)測(cè)值和真實(shí)值之間存在細(xì)微的誤差是允許的。這樣可以防止模型過(guò)擬合并且使得神經(jīng)網(wǎng)絡(luò)對(duì)于未知數(shù)據(jù)有著更強(qiáng)的泛化能力。
下一步是什么?
幸運(yùn)的是我們的學(xué)習(xí)之旅還沒(méi)有結(jié)束,仍然有很多關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的內(nèi)容需要學(xué)習(xí)。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數(shù)
? 在訓(xùn)練網(wǎng)絡(luò)的時(shí)候應(yīng)用學(xué)習(xí)率
? 在面對(duì)圖像分類任務(wù)的時(shí)候使用卷積神經(jīng)網(wǎng)絡(luò)
我很快會(huì)寫(xiě)更多關(guān)于這個(gè)主題的內(nèi)容,敬請(qǐng)期待!
最后的想法
我自己也從零開(kāi)始寫(xiě)了很多神經(jīng)網(wǎng)絡(luò)的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學(xué)習(xí)框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺(jué)得對(duì)于有追求的數(shù)據(jù)科學(xué)家來(lái)說(shuō),理解內(nèi)部原理是非常有益的。
這種練習(xí)對(duì)我自己來(lái)說(shuō)已成成為重要的時(shí)間投入,希望也能對(duì)你有所幫助
用selenium做自動(dòng)化,有時(shí)候會(huì)遇到需要模擬鼠標(biāo)操作才能進(jìn)行的情況,比如單擊、雙擊、點(diǎn)擊鼠標(biāo)右鍵、拖拽等等。而selenium給我們提供了一個(gè)類來(lái)處理這類事件——ActionChains
selenium.webdriver.common.action_chains.ActionChains(driver)
這個(gè)類基本能夠滿足我們所有對(duì)鼠標(biāo)操作的需求。
1.ActionChains基本用法
首先需要了解ActionChains的執(zhí)行原理,當(dāng)你調(diào)用ActionChains的方法時(shí),不會(huì)立即執(zhí)行,而是會(huì)將所有的操作按順序存放在一個(gè)隊(duì)列里,當(dāng)你調(diào)用perform()方法時(shí),隊(duì)列中的時(shí)間會(huì)依次執(zhí)行。
這種情況下我們可以有兩種調(diào)用方法:
鏈?zhǔn)綄?xiě)法
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = ? ?driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
1
2
3
4
分步寫(xiě)法
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
1
2
3
4
5
6
7
兩種寫(xiě)法本質(zhì)是一樣的,ActionChains都會(huì)按照順序執(zhí)行所有的操作。
2.ActionChains方法列表
click(on_element=None) ——單擊鼠標(biāo)左鍵
click_and_hold(on_element=None) ——點(diǎn)擊鼠標(biāo)左鍵,不松開(kāi)
context_click(on_element=None) ——點(diǎn)擊鼠標(biāo)右鍵
double_click(on_element=None) ——雙擊鼠標(biāo)左鍵
drag_and_drop(source, target) ——拖拽到某個(gè)元素然后松開(kāi)
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個(gè)坐標(biāo)然后松開(kāi)
key_down(value, element=None) ——按下某個(gè)鍵盤上的鍵
key_up(value, element=None) ——松開(kāi)某個(gè)鍵
move_by_offset(xoffset, yoffset) ——鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)
move_to_element(to_element) ——鼠標(biāo)移動(dòng)到某個(gè)元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置
perform() ——執(zhí)行鏈中的所有動(dòng)作
release(on_element=None) ——在某個(gè)元素位置松開(kāi)鼠標(biāo)左鍵
send_keys(*keys_to_send) ——發(fā)送某個(gè)鍵到當(dāng)前焦點(diǎn)的元素
send_keys_to_element(element, *keys_to_send) ——發(fā)送某個(gè)鍵到指定元素
接下來(lái)用示例來(lái)詳細(xì)說(shuō)明和演示每一個(gè)方法的用法:
3.代碼示例
1. 點(diǎn)擊操作
代碼:
# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleep
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('')
click_btn = driver.find_element_by_xpath('//input[@value="click me"]') ?# 單擊按鈕doubleclick_btn = driver.find_element_by_xpath('//input[@value="dbl click me"]') ?# 雙擊按鈕rightclick_btn = driver.find_element_by_xpath('//input[@value="right click me"]') ?# 右鍵單擊按鈕ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perform() ?# 鏈?zhǔn)接梅╬rint driver.find_element_by_name('t2').get_attribute('value')
sleep(2)
driver.quit()1234567891011121314151617181920212223
結(jié)果:
[CLICK][DOUBLE_CLICK][RIGHT_CLICK]1
2.鼠標(biāo)移動(dòng)
示例代碼:
# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleep
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('')
write = driver.find_element_by_xpath('//input[@value="Write on hover"]') ?# 鼠標(biāo)移動(dòng)到此元素,在下面的input框中會(huì)顯示“Mouse moved”blank = driver.find_element_by_xpath('//input[@value="Blank on hover"]') ?# 鼠標(biāo)移動(dòng)到此元素,會(huì)清空下面input框中的內(nèi)容result = driver.find_element_by_name('t1')
action = ActionChains(driver)
action.move_to_element(write).perform() ?# 移動(dòng)到write,顯示“Mouse moved”print result.get_attribute('value')# action.move_to_element(blank).perform()action.move_by_offset(10, 50).perform() ?# 移動(dòng)到距離當(dāng)前位置(10,50)的點(diǎn),與上句效果相同,移動(dòng)到blank上,清空print result.get_attribute('value')
action.move_to_element_with_offset(blank, 10, -40).perform() ?# 移動(dòng)到距離blank元素(10,-40)的點(diǎn),可移動(dòng)到write上print result.get_attribute('value')
sleep(2)
driver.quit()1234567891011121314151617181920212223242526272829
結(jié)果
Mouse moved
Mouse moved123
一般很少用位置關(guān)系來(lái)移動(dòng)鼠標(biāo),如果需要,可參考下面的鏈接來(lái)測(cè)量元素位置
3.拖拽
代碼:
# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleep
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('ls.htm')
dragger = driver.find_element_by_id('dragger') ?# 被拖拽元素item1 = driver.find_element_by_xpath('//div[text()="Item 1"]') ?# 目標(biāo)元素1item2 = driver.find_element_by_xpath('//div[text()="Item 2"]') ?# 目標(biāo)2item3 = driver.find_element_by_xpath('//div[text()="Item 3"]') ?# 目標(biāo)3item4 = driver.find_element_by_xpath('//div[text()="Item 4"]') ?# 目標(biāo)4action = ActionChains(driver)
action.drag_and_drop(dragger, item1).perform() ?# 1.移動(dòng)dragger到目標(biāo)1sleep(2)
action.click_and_hold(dragger).release(item2).perform() ?# 2.效果與上句相同,也能起到移動(dòng)效果sleep(2)
action.click_and_hold(dragger).move_to_element(item3).release().perform() ?# 3.效果與上兩句相同,也能起到移動(dòng)的效果sleep(2)# action.drag_and_drop_by_offset(dragger, 400, 150).perform() ?# 4.移動(dòng)到指定坐標(biāo)action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() ?# 5.與上一句相同,移動(dòng)到指定坐標(biāo)sleep(2)
driver.quit()12345678910111213141516171819202122232425262728
結(jié)果:
dropped dropped dropped dropped1
一般用坐標(biāo)定位很少,用上例中的方法1足夠了,如果看源碼,會(huì)發(fā)現(xiàn)方法2其實(shí)就是方法1中的drag_and_drop()的實(shí)現(xiàn)。注意:拖拽使用時(shí)注意加等待時(shí)間,有時(shí)會(huì)因?yàn)樗俣忍於 ?/p>
4.按鍵
模擬按鍵有多種方法,能用win32api來(lái)實(shí)現(xiàn),能用SendKeys來(lái)實(shí)現(xiàn),也可以用selenium的WebElement對(duì)象的send_keys()方法來(lái)實(shí)現(xiàn),這里ActionChains類也提供了幾個(gè)模擬按鍵的方法。
代碼1:
# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleep
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('press.htm')
key_up_radio = driver.find_element_by_id('r1') ?# 監(jiān)測(cè)按鍵升起key_down_radio = driver.find_element_by_id('r2') ?# 監(jiān)測(cè)按鍵按下key_press_radio = driver.find_element_by_id('r3') ?# 監(jiān)測(cè)按鍵按下升起enter = driver.find_elements_by_xpath('//form[@name="f1"]/input')[1] ?# 輸入框result = driver.find_elements_by_xpath('//form[@name="f1"]/input')[0] ?# 監(jiān)測(cè)結(jié)果# 監(jiān)測(cè)key_downkey_down_radio.click()
ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()print result.get_attribute('value')# 監(jiān)測(cè)key_upkey_up_radio.click()
enter.click()
ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()print result.get_attribute('value')# 監(jiān)測(cè)key_presskey_press_radio.click()
enter.click()
ActionChains(driver).send_keys('a').perform()print result.get_attribute('value')
driver.quit()1234567891011121314151617181920212223242526272829303132333435
結(jié)果:
key downed charCode=[0] keyCode=[17] CTRLkey upped charCode=[0] keyCode=[16] NONEkey pressed charCode=[97] keyCode=[0] NONE123
示例2:
代碼:
# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keysfrom time import sleep
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('hel.htm')
input1 = driver.find_elements_by_tag_name('input')[3]
input2 = driver.find_elements_by_tag_name('input')[4]
action = ActionChains(driver)
input1.click()
action.send_keys('Test Keys').perform()
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() ?# ctrl+aaction.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() ?# ctrl+caction.key_down(Keys.CONTROL, input2).send_keys('v').key_up(Keys.CONTROL).perform() ?# ctrl+vprint input1.get_attribute('value')print input2.get_attribute('value')
driver.quit()12345678910111213141516171819202122232425262728
結(jié)果:
Test Keys
Test Keys12
復(fù)制粘貼用WebElement input .send_keys()也能實(shí)現(xiàn),大家可以試一下,也可以用更底層的方法,同時(shí)也是os彈框的處理辦法之一的win32api,有興趣也可以試試SendKeys、keybd_event
這是Python語(yǔ)言中的鏈?zhǔn)秸{(diào)用,它要求前面的被調(diào)用函數(shù)返回同一個(gè)類的對(duì)象。
RequestMapping似乎沒(méi)有name參數(shù)吧,它是用來(lái)替代HandleMapping的,一般用于連接瀏覽器與服務(wù)器之間的路徑,如@RequestMapping("/login.do")有name參數(shù)的是Resource,像@Resource(name = "loginService")。
解釋性:
一個(gè)用編譯性語(yǔ)言比如C或C++寫(xiě)的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。
運(yùn)行程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行 程序。
在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。這使得使用Python更加簡(jiǎn)單。也使得Python程序更加易于移植。
網(wǎng)站標(biāo)題:關(guān)于鏈?zhǔn)胶瘮?shù)python的信息
文章起源:http://chinadenli.net/article9/dsgojih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、搜索引擎優(yōu)化、定制網(wǎng)站、商城網(wǎng)站、網(wǎng)站排名、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)