女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

讓你的 Python 代碼優(yōu)雅又地道

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:鄧佳佳 ? 2018-03-06 10:35 ? 次閱讀

前言

Python社區(qū)文化的澆灌下,演化出了一種獨(dú)特的代碼風(fēng)格,去指導(dǎo)如何正確地使用Python,這就是常說(shuō)的pythonic。一般說(shuō)地道(idiomatic)的python代碼,就是指這份代碼很pythonic。Python的語(yǔ)法和標(biāo)準(zhǔn)庫(kù)設(shè)計(jì),處處契合著pythonic的思想。而且Python社區(qū)十分注重編碼風(fēng)格一的一致性,他們極力推行和處處實(shí)踐著pythonic。所以經(jīng)常能看到基于某份代碼P vs NP (pythonic vs non-pythonic)的討論。pythonic的代碼簡(jiǎn)練,明確,優(yōu)雅,絕大部分時(shí)候執(zhí)行效率高。閱讀pythonic的代碼能體會(huì)到“代碼是寫(xiě)給人看的,只是順便讓機(jī)器能運(yùn)行”暢快。

然而什么是pythonic,就像什么是地道的漢語(yǔ)一樣,切實(shí)存在但標(biāo)準(zhǔn)模糊。import this可以看到Tim Peters提出的Python之禪,它提供了指導(dǎo)思想。許多初學(xué)者都看過(guò)它,深深贊同它的理念,但是實(shí)踐起來(lái)又無(wú)從下手。PEP 8給出的不過(guò)是編碼規(guī)范,對(duì)于實(shí)踐pythonic還遠(yuǎn)遠(yuǎn)不夠。如果你正被如何寫(xiě)出pythonic的代碼而困擾,或許這份筆記能給你幫助。

Raymond Hettinger是Python核心開(kāi)發(fā)者,本文提到的許多特性都是他開(kāi)發(fā)的。同時(shí)他也是Python社區(qū)熱忱的布道師,不遺余力地傳授pythonic之道。這篇文章是網(wǎng)友Jeff Paine整理的他在2013年美國(guó)的PyCon的演講的筆記。

術(shù)語(yǔ)澄清:本文所說(shuō)的集合全都指collection,而不是set。

以下是正文。

本文是Raymond Hettinger在2013年美國(guó)PyCon演講的筆記(視頻, 幻燈片)。

示例代碼和引用的語(yǔ)錄都來(lái)自Raymond的演講。這是我按我的理解整理出來(lái)的,希望你們理解起來(lái)跟我一樣順暢!

遍歷一個(gè)范圍內(nèi)的數(shù)字

foriin[0,1,2,3,4,5]:

printi **2

foriinrange(6):

printi **2

更好的方法

foriinxrange(6):

printi **2

xrange會(huì)返回一個(gè)迭代器,用來(lái)一次一個(gè)值地遍歷一個(gè)范圍。這種方式會(huì)比range更省內(nèi)存。xrange在Python 3中已經(jīng)改名為range。

遍歷一個(gè)集合

colors=['red','green','blue','yellow']

foriinrange(len(colors)):

printcolors[i]

更好的方法

forcolorincolors:

printcolor

反向遍歷

colors=['red','green','blue','yellow']

foriinrange(len(colors)-1,-1,-1):

printcolors[i]

更好的方法

forcolorinreversed(colors):

printcolor

遍歷一個(gè)集合及其下標(biāo)

colors=['red','green','blue','yellow']

foriinrange(len(colors)):

printi,'--->',colors[i]

更好的方法

fori,colorinenumerate(colors):

printi,'--->',color

這種寫(xiě)法效率高,優(yōu)雅,而且?guī)湍闶∪ビH自創(chuàng)建和自增下標(biāo)。

當(dāng)你發(fā)現(xiàn)你在操作集合的下標(biāo)時(shí),你很有可能在做錯(cuò)事。

遍歷兩個(gè)集合

names=['raymond','rachel','matthew']

colors=['red','green','blue','yellow']

n=min(len(names),len(colors))

foriinrange(n):

printnames[i],'--->',colors[i]

forname,colorinzip(names,colors):

printname,'--->',color

更好的方法

forname,colorinizip(names,colors):

printname,'--->',color

zip在內(nèi)存中生成一個(gè)新的列表,需要更多的內(nèi)存。izip比zip效率更高。

注意:在Python 3中,izip改名為zip,并替換了原來(lái)的zip成為內(nèi)置函數(shù)。

有序地遍歷

colors=['red','green','blue','yellow']

# 正序

forcolorinsorted(colors):

printcolors

# 倒序

forcolorinsorted(colors,reverse=True):

printcolors

自定義排序順序

colors=['red','green','blue','yellow']

def compare_length(c1,c2):

iflen(c1)

iflen(c1)>len(c2):return1

return0

print sorted(colors,cmp=compare_length)

更好的方法

print sorted(colors, key=len)

第一種方法效率低而且寫(xiě)起來(lái)很不爽。另外,Python 3已經(jīng)不支持比較函數(shù)了。

調(diào)用一個(gè)函數(shù)直到遇到標(biāo)記值

blocks=[]

whileTrue:

block=f.read(32)

ifblock=='':

break

blocks.append(block)

更好的方法

blocks=[]

forblockiniter(partial(f.read,32),''):

blocks.append(block)

iter接受兩個(gè)參數(shù)。第一個(gè)是你反復(fù)調(diào)用的函數(shù),第二個(gè)是標(biāo)記值。

譯注:這個(gè)例子里不太能看出來(lái)方法二的優(yōu)勢(shì),甚至覺(jué)得partial讓代碼可讀性更差了。方法二的優(yōu)勢(shì)在于iter的返回值是個(gè)迭代器,迭代器能用在各種地方,set,sorted,min,max,heapq,sum……

在循環(huán)內(nèi)識(shí)別多個(gè)退出點(diǎn)

def find(seq,target):

found=False

fori,valueinenumerate(seq):

ifvalue==target:

found=True

break

ifnotfound:

return-1

returni

更好的方法

def find(seq,target):

fori,valueinenumerate(seq):

ifvalue==target:

break

else:

return-1

returni

for執(zhí)行完所有的循環(huán)后就會(huì)執(zhí)行else。

譯注:剛了解for-else語(yǔ)法時(shí)會(huì)困惑,什么情況下會(huì)執(zhí)行到else里。有兩種方法去理解else。傳統(tǒng)的方法是把for看作if,當(dāng)for后面的條件為False時(shí)執(zhí)行else。其實(shí)條件為False時(shí),就是for循環(huán)沒(méi)被break出去,把所有循環(huán)都跑完的時(shí)候。所以另一種方法就是把else記成nobreak,當(dāng)for沒(méi)有被break,那么循環(huán)結(jié)束時(shí)會(huì)進(jìn)入到else。

遍歷字典的key

d={'matthew':'blue','rachel':'green','raymond':'red'}

forkind:

printk

forkind.keys():

ifk.startswith('r'):

deld[k]

什么時(shí)候應(yīng)該使用第二種而不是第一種方法?當(dāng)你需要修改字典的時(shí)候。

如果你在迭代一個(gè)東西的時(shí)候修改它,那就是在冒天下之大不韙,接下來(lái)發(fā)生什么都活該。

d.keys()把字典里所有的key都復(fù)制到一個(gè)列表里。然后你就可以修改字典了。

注意:如果在Python 3里迭代一個(gè)字典你得顯示地寫(xiě):list(d.keys()),因?yàn)閐.keys()返回的是一個(gè)“字典視圖”(一個(gè)提供字典key的動(dòng)態(tài)視圖的迭代器)。詳情請(qǐng)看文檔。

遍歷一個(gè)字典的key和value

# 并不快,每次必須要重新哈希并做一次查找

forkind:

printk,'--->',d[k]

# 產(chǎn)生一個(gè)很大的列表

fork,vind.items():

printk,'--->',v

更好的方法

fork,vind.iteritems():

printk,'--->',v

iteritems()更好是因?yàn)樗祷亓艘粋€(gè)迭代器。

注意:Python 3已經(jīng)沒(méi)有iteritems()了,items()的行為和iteritems()很接近。詳情請(qǐng)看文檔。

用key-value對(duì)構(gòu)建字典

names=['raymond','rachel','matthew']

colors=['red','green','blue']

d=dict(izip(names,colors))

# {'matthew': 'blue', 'rachel': 'green', 'raymond': 'red'}

Python 3: d = dict(zip(names, colors))

用字典計(jì)數(shù)

colors=['red','green','red','blue','green','red']

# 簡(jiǎn)單,基本的計(jì)數(shù)方法。適合初學(xué)者起步時(shí)學(xué)習(xí)。

d={}

forcolorincolors:

ifcolornotind:

d[color]=0

d[color]+=1

# {'blue': 1, 'green': 2, 'red': 3}

更好的方法

d={}

forcolorincolors:

d[color]=d.get(color,0)+1

# 稍微潮點(diǎn)的方法,但有些坑需要注意,適合熟練的老手。

d=defaultdict(int)

forcolorincolors:

d[color]+=1

用字典分組 — 第I部分和第II部分

names=['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

# 在這個(gè)例子,我們按name的長(zhǎng)度分組

d={}

fornameinnames:

key=len(name)

ifkeynotind:

d[key]=[]

d[key].append(name)

# {5: ['roger', 'betty'], 6: ['rachel', 'judith'], 7: ['raymond', 'matthew', 'melissa', 'charlie']}

d={}

fornameinnames:

key=len(name)

d.setdefault(key,[]).append(name)

更好的方法

d=defaultdict(list)

fornameinnames:

key=len(name)

d[key].append(name)

字典的popitem()是原子的嗎?

d={'matthew':'blue','rachel':'green','raymond':'red'}

whiled:

key,value=d.popitem()

printkey,'-->',value

popitem是原子的,所以多線程的時(shí)候沒(méi)必要用鎖包著它。

連接字典

defaults={'color':'red','user':'guest'}

parser=argparse.ArgumentParser()

parser.add_argument('-u','--user')

parser.add_argument('-c','--color')

namespace=parser.parse_args([])

command_line_args={k:vfork,vinvars(namespace).items()ifv}

# 下面是通常的作法,默認(rèn)使用第一個(gè)字典,接著用環(huán)境變量覆蓋它,最后用命令行參數(shù)覆蓋它。

# 然而不幸的是,這種方法拷貝數(shù)據(jù)太瘋狂。

d=defaults.copy()

d.update(os.environ)

d.update(command_line_args)

更好的方法

d = ChainMap(command_line_args, os.environ, defaults)

ChainMap在Python 3中加入。高效而優(yōu)雅。

提高可讀性

位置參數(shù)和下標(biāo)很漂亮

但關(guān)鍵字和名稱更好

第一種方法對(duì)計(jì)算機(jī)來(lái)說(shuō)很便利

第二種方法和人類思考方式一致

用關(guān)鍵字參數(shù)提高函數(shù)調(diào)用的可讀性

twitter_search('@obama', False, 20, True)

更好的方法

twitter_search('@obama', retweets=False, numtweets=20, popular=True)

第二種方法稍微(微秒級(jí))慢一點(diǎn),但為了代碼的可讀性和開(kāi)發(fā)時(shí)間,值得。

用namedtuple提高多個(gè)返回值的可讀性

# 老的testmod返回值

doctest.testmod()

# (0, 4)

# 測(cè)試結(jié)果是好是壞?你看不出來(lái),因?yàn)榉祷刂挡磺逦?/p>

更好的方法

# 新的testmod返回值, 一個(gè)namedtuple

doctest.testmod()

# TestResults(failed=0, attempted=4)

namedtuple是tuple的子類,所以仍適用正常的元組操作,但它更友好。

創(chuàng)建一個(gè)nametuple

TestResults = namedTuple('TestResults', ['failed', 'attempted'])

unpack序列

p='Raymond','Hettinger',0x30,'[email protected]'

# 其它語(yǔ)言的常用方法/習(xí)慣

fname=p[0]

lname=p[1]

age=p[2]

email=p[3]

更好的方法

fname, lname, age, email = p

第二種方法用了unpack元組,更快,可讀性更好。

更新多個(gè)變量的狀態(tài)

def fibonacci(n):

x=0

y=1

foriinrange(n):

printx

t=y

y=x+y

x=t

更好的方法

def fibonacci(n):

x,y=0,1

foriinrange(n):

printx

x,y=y,x+y

第一種方法的問(wèn)題

x和y是狀態(tài),狀態(tài)應(yīng)該在一次操作中更新,分幾行的話狀態(tài)會(huì)互相對(duì)不上,這經(jīng)常是bug的源頭。

操作有順序要求

太底層太細(xì)節(jié)

第二種方法抽象層級(jí)更高,沒(méi)有操作順序出錯(cuò)的風(fēng)險(xiǎn)而且更效率更高。

同時(shí)狀態(tài)更新

tmp_x=x+dx *t

tmp_y=y+dy *t

tmp_dx=influence(m,x,y,dx,dy,partial='x')

tmp_dy=influence(m,x,y,dx,dy,partial='y')

x=tmp_x

y=tmp_y

dx=tmp_dx

dy=tmp_dy

更好的方法

x,y,dx,dy=(x+dx *t,

y+dy *t,

influence(m,x,y,dx,dy,partial='x'),

influence(m,x,y,dx,dy,partial='y'))

效率

優(yōu)化的基本原則

除非必要,別無(wú)故移動(dòng)數(shù)據(jù)

稍微注意一下用線性的操作取代O(n**2)的操作

總的來(lái)說(shuō),不要無(wú)故移動(dòng)數(shù)據(jù)

連接字符串

names=['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

s=names[0]

fornameinnames[1:]:

s+=', '+name

prints

更好的方法

print ', '.join(names)

更新序列

names=['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie']

delnames[0]

# 下面的代碼標(biāo)志著你用錯(cuò)了數(shù)據(jù)結(jié)構(gòu)

names.pop(0)

names.insert(0,'mark')

更好的方法

names=deque(['raymond','rachel','matthew','roger',

'betty','melissa','judith','charlie'])

# 用deque更有效率

delnames[0]

names.popleft()

names.appendleft('mark')

裝飾器和上下文管理

用于把業(yè)務(wù)和管理的邏輯分開(kāi)

分解代碼和提高代碼重用性的干凈優(yōu)雅的好工具

起個(gè)好名字很關(guān)鍵

記住蜘蛛俠的格言:能力越大,責(zé)任越大

使用裝飾器分離出管理邏輯

# 混著業(yè)務(wù)和管理邏輯,無(wú)法重用

def web_lookup(url,saved={}):

ifurlinsaved:

returnsaved[url]

page=urllib.urlopen(url).read()

saved[url]=page

returnpage

更好的方法

@cache

def web_lookup(url):

returnurllib.urlopen(url).read()

注意:Python 3.2開(kāi)始加入了functools.lru_cache解決這個(gè)問(wèn)題。

分離臨時(shí)上下文

# 保存舊的,創(chuàng)建新的

old_context=getcontext().copy()

getcontext().prec=50

print Decimal(355)/Decimal(113)

setcontext(old_context)

更好的方法

with localcontext(Context(prec=50)):

print Decimal(355)/Decimal(113)

譯注:示例代碼在使用標(biāo)準(zhǔn)庫(kù)decimal,這個(gè)庫(kù)已經(jīng)實(shí)現(xiàn)好了localcontext。

如何打開(kāi)關(guān)閉文件

f=open('data.txt')

try:

data=f.read()

finally:

f.close()

更好的方法

with open('data.txt')asf:

data=f.read()

如何使用鎖

# 創(chuàng)建鎖

lock=threading.Lock()

# 使用鎖的老方法

lock.acquire()

try:

print'Critical section 1'

print'Critical section 2'

finally:

lock.release()

更好的方法

# 使用鎖的新方法

withlock:

print'Critical section 1'

print'Critical section 2'

分離出臨時(shí)的上下文

try:

os.remove('somefile.tmp')

exceptOSError:

pass

更好的方法

with ignored(OSError):

os.remove('somefile.tmp')

ignored是Python 3.4加入的, 文檔。

注意:ignored 實(shí)際上在標(biāo)準(zhǔn)庫(kù)叫suppress(譯注:contextlib.supress).

試試創(chuàng)建你自己的ignored上下文管理器。

@contextmanager

def ignored(*exceptions):

try:

yield

exceptexceptions:

pass

把它放在你的工具目錄,你也可以忽略異常

譯注:contextmanager在標(biāo)準(zhǔn)庫(kù)contextlib中,通過(guò)裝飾生成器函數(shù),省去用__enter__和__exit__寫(xiě)上下文管理器。詳情請(qǐng)看文檔。

分離臨時(shí)上下文

# 臨時(shí)把標(biāo)準(zhǔn)輸出重定向到一個(gè)文件,然后再恢復(fù)正常

with open('help.txt','w')asf:

oldstdout=sys.stdout

sys.stdout=f

try:

help(pow)

finally:

sys.stdout=oldstdout

更好的寫(xiě)法

with open('help.txt','w')asf:

with redirect_stdout(f):

help(pow)

redirect_stdout在Python 3.4加入(譯注:contextlib.redirect_stdout), bug反饋。

實(shí)現(xiàn)你自己的redirect_stdout上下文管理器。

@contextmanager

def redirect_stdout(fileobj):

oldstdout=sys.stdout

sys.stdout=fileobj

try:

yield fieldobj

finally:

sys.stdout=oldstdout

簡(jiǎn)潔的單句表達(dá)

兩個(gè)沖突的原則:

一行不要有太多邏輯

不要把單一的想法拆分成多個(gè)部分

Raymond的原則:

一行代碼的邏輯等價(jià)于一句自然語(yǔ)言

列表解析和生成器

result=[]

foriinrange(10):

s=i **2

result.append(s)

print sum(result)

更好的方法

print sum(i**2 for i in xrange(10))

第一種方法說(shuō)的是你在做什么,第二種方法說(shuō)的是你想要什么。

編譯:0xFEE1C001

www.lightxue.com/transforming-code-into-beautiful-idiomatic-python

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86212

原文標(biāo)題:讓你的 Python 代碼優(yōu)雅又地道

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從初學(xué)到進(jìn)階:樹(shù)莓派上最適合代碼編輯器推薦!

    安裝樹(shù)莓派操作系統(tǒng)后,就可以使用Python、Scratch、Java、C/C++等受Linux支持的多種編程語(yǔ)言進(jìn)行編程了。其中,Python是樹(shù)莓派上最受歡迎的編程語(yǔ)言。在樹(shù)莓派上開(kāi)展任何項(xiàng)目
    的頭像 發(fā)表于 05-15 16:20 ?143次閱讀
    從初學(xué)到進(jìn)階:樹(shù)莓派上最適合<b class='flag-5'>你</b>的<b class='flag-5'>代碼</b>編輯器推薦!

    推薦!如何優(yōu)雅地?cái)[好PCB絲印?

    很多畫(huà)PCB的人,會(huì)認(rèn)為絲印不影響電路的性能,所以,對(duì)絲印并不重視。但是,對(duì)于一個(gè)專業(yè)的硬件工程師來(lái)說(shuō),必須重視這些細(xì)節(jié)。 下面介紹如何優(yōu)雅地弄好PCB絲印。 1 擺放的位置 一般來(lái)說(shuō),電阻、電容
    發(fā)表于 04-08 14:59

    性能飆升!使用Python并行計(jì)算榨干樹(shù)莓派算力!

    甚至微型服務(wù)器時(shí),是否也遇到過(guò)程序卡頓、視頻處理延遲的尷尬?今天我們就手把手教你用Python并行處理技術(shù),樹(shù)莓派的性能瞬間翻倍!歡迎在評(píng)論區(qū)曬出的優(yōu)化方案,
    的頭像 發(fā)表于 03-26 17:08 ?298次閱讀
    <b class='flag-5'>讓</b>性能飆升!使用<b class='flag-5'>Python</b>并行計(jì)算榨干樹(shù)莓派算力!

    ?如何在虛擬環(huán)境中使用 Python,提升的開(kāi)發(fā)體驗(yàn)~

    RaspberryPiOS預(yù)裝了Python需要使用其虛擬環(huán)境來(lái)安裝包。今天出版的最新一期《TheMagPi》雜志刊登了我們文檔負(fù)責(zé)人NateContino撰寫(xiě)的一篇實(shí)用教程,幫助你入門(mén)
    的頭像 發(fā)表于 03-25 09:34 ?232次閱讀
    ?如何在虛擬環(huán)境中使用 <b class='flag-5'>Python</b>,提升<b class='flag-5'>你</b>的開(kāi)發(fā)體驗(yàn)~

    僅僅11招,的樹(shù)莓派好!快!強(qiáng)!

    RaspberryPi默認(rèn)設(shè)置并不會(huì)為提供最佳性能。它是一臺(tái)易于使用且經(jīng)濟(jì)實(shí)惠的優(yōu)秀計(jì)算機(jī),但并非以速度為賣點(diǎn)。如果你想的RaspberryPi運(yùn)行飛快,需要采取一些措施來(lái)提升
    的頭像 發(fā)表于 03-25 09:30 ?294次閱讀
    僅僅11招,<b class='flag-5'>讓</b><b class='flag-5'>你</b>的樹(shù)莓派<b class='flag-5'>又</b>好!<b class='flag-5'>又</b>快!<b class='flag-5'>又</b>強(qiáng)!

    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    在這篇文章中,我將為簡(jiǎn)要介紹Python程序是什么、Python程序可以用來(lái)做什么,以及如何在RaspberryPi上編寫(xiě)和運(yùn)行一個(gè)簡(jiǎn)單的Python程序。什么是
    的頭像 發(fā)表于 03-25 09:27 ?501次閱讀
    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行<b class='flag-5'>Python</b>程序?

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個(gè)推理過(guò)程中使用相同的圖像和模型。 從 C++ 代碼中獲得的結(jié)果與 Python*
    發(fā)表于 03-06 06:22

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測(cè)。以下是一個(gè)詳細(xì)的教程,指導(dǎo)如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?1163次閱讀

    使用Python進(jìn)行串口通信的案例

    當(dāng)然!以下是一個(gè)使用Python進(jìn)行串口通信的簡(jiǎn)單示例。這個(gè)示例展示了如何配置串口、發(fā)送數(shù)據(jù)以及接收數(shù)據(jù)。我們將使用 pyserial 庫(kù),這是一個(gè)非常流行的用于串口通信的Python庫(kù)。 首先,
    的頭像 發(fā)表于 11-22 09:11 ?1217次閱讀

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?916次閱讀

    使用Python進(jìn)行圖像處理

    下面是一個(gè)關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?525次閱讀
    使用<b class='flag-5'>Python</b>進(jìn)行圖像處理

    Python常用函數(shù)大全

    Python 世界里,有一些寶藏函數(shù)和模塊,它們可以編程更輕松、代碼更高效。這篇文章將帶你一一認(rèn)識(shí)這些神器,
    的頭像 發(fā)表于 10-27 17:20 ?801次閱讀

    【每天學(xué)點(diǎn)AI】一個(gè)例子帶你了解Python裝飾器到底在干嘛!

    今天我們來(lái)聊聊一種能給你的代碼變得“加料”的神器——Python裝飾器。就像一杯咖啡,原本它是苦的,為了它符合我的口味,我給它添加了糖,添加之后就完美的符合了我的口味。那么,裝飾器又是如何給
    的頭像 發(fā)表于 09-20 16:54 ?731次閱讀
    【每天學(xué)點(diǎn)AI】一個(gè)例子帶你了解<b class='flag-5'>Python</b>裝飾器到底在干嘛!

    揭秘能耗管理系統(tǒng):如何的建筑綠色省錢(qián)?

    揭秘能耗管理系統(tǒng):如何的建筑綠色省錢(qián)? 在當(dāng)今這個(gè)環(huán)保意識(shí)日益增強(qiáng)的時(shí)代,建筑行業(yè)的綠色轉(zhuǎn)型已成為不可逆轉(zhuǎn)的趨勢(shì)。而在這場(chǎng)轉(zhuǎn)型中,能耗管理系統(tǒng)(Energy Management System
    的頭像 發(fā)表于 08-14 10:38 ?454次閱讀

    pytorch和python的關(guān)系是什么

    ,PyTorch已經(jīng)成為了一個(gè)非常受歡迎的框架。本文將介紹PyTorch和Python之間的關(guān)系,以及它們?cè)谏疃葘W(xué)習(xí)領(lǐng)域的應(yīng)用。 Python簡(jiǎn)介 Python是一種高級(jí)、解釋型、通用的編程語(yǔ)言,由Guido van Rossu
    的頭像 發(fā)表于 08-01 15:27 ?3092次閱讀