狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > python中如何注釋

網(wǎng)站性能檢測(cè)評(píng)分

注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問題,僅供參考。

python中如何注釋

在Python 2.7即將停止支持時(shí),我們?yōu)槟銣?zhǔn)備了一份3.x遷移指南 推廣視頻課程

img

雍訪風(fēng)

關(guān)注

機(jī)器之心編譯

目前,Python 科學(xué)棧中的所有主要項(xiàng)目都同時(shí)支持 Python 3.x 和 Python 2.7,不過,這種情況很快即將結(jié)束。去年 11 月,Numpy 團(tuán)隊(duì)的一份聲明引發(fā)了數(shù)據(jù)科學(xué)社區(qū)的關(guān)注:這一科學(xué)計(jì)算庫(kù)即將放棄對(duì)于 Python 2.7 的支持,全面轉(zhuǎn)向 Python 3。Numpy 并不是唯一宣稱即將放棄 Python 舊版本支持的工具,pandas 與 Jupyter notebook 等很多產(chǎn)品也在即將放棄支持的名單之中。對(duì)于數(shù)據(jù)科學(xué)開發(fā)者而言,如何將已有項(xiàng)目從 Python 2 轉(zhuǎn)向 Python 3 成為了正在面臨的重大問題。來自莫斯科大學(xué)的 Alex Rogozhnikov 博士為我們整理了一份代碼遷移指南。

Python 3 功能簡(jiǎn)介

Python 是機(jī)器學(xué)習(xí)和其他科學(xué)領(lǐng)域中的主流語言,我們通常需要使用它處理大量的數(shù)據(jù)。Python 兼容多種深度學(xué)習(xí)框架,且具備很多優(yōu)秀的工具來執(zhí)行數(shù)據(jù)預(yù)處理和可視化。

但是,Python 2 和 Python 3 長(zhǎng)期共存于 Python 生態(tài)系統(tǒng)中,很多數(shù)據(jù)科學(xué)家仍然使用 Python 2。2019 年底,Numpy 等很多科學(xué)計(jì)算工具都將停止支持 Python 2,而 2018 年后 Numpy 的所有新功能版本將只支持 Python 3。

為了使 Python 2 向 Python 3 的轉(zhuǎn)換更加輕松,我收集了一些 Python 3 的功能,希望對(duì)大家有用。

使用 pathlib 更好地處理路徑

pathlib 是 Python 3 的默認(rèn)模塊,幫助避免使用大量的 os.path.joins:

from pathlib importPath

dataset ='wiki_images'

datasets_root =Path('/path/to/datasets/')

train_path = datasets_root / dataset /'train'

test_path = datasets_root / dataset /'test'

for image_path in train_path.iterdir():

with image_path.open()as f:# note, open is a method of Path object

# do something with an image

Python 2 總是試圖使用字符串級(jí)聯(lián)(準(zhǔn)確,但不好),現(xiàn)在有了 pathlib,代碼安全、準(zhǔn)確、可讀性強(qiáng)。

此外,pathlib.Path 具備大量方法,這樣 Python 新用戶就不用每個(gè)方法都去搜索了:

p.exists()

p.is_dir()

p.parts()

p.with_name('sibling.png')# only change the name, but keep the folder

p.with_suffix('.jpg')# only change the extension, but keep the folder and the name

p.chmod(mode)

p.rmdir()

pathlib 會(huì)節(jié)約大量時(shí)間,詳見:

文檔:https://docs.python.org/3/library/pathlib.html;

參考信息:https://pymotw/3/pathlib/。

類型提示(Type hinting)成為語言的一部分

PyCharm 中的類型提示示例:

Python 不只是適合腳本的語言,現(xiàn)在的數(shù)據(jù)流程還包括大量步驟,每一步都包括不同的框架(有時(shí)也包括不同的邏輯)。

類型提示被引入 Python,以幫助處理越來越復(fù)雜的項(xiàng)目,使機(jī)器可以更好地進(jìn)行代碼驗(yàn)證。而之前需要不同的模塊使用自定義方式在文檔字符串中指定類型(注意:PyCharm 可以將舊的文檔字符串轉(zhuǎn)換成新的類型提示)。

下列代碼是一個(gè)簡(jiǎn)單示例,可以處理不同類型的數(shù)據(jù)(這就是我們喜歡 Python 數(shù)據(jù)棧之處)。

def repeat_each_entry(data):

""" Each entry in the data is doubled

"""

index = numpy.repeat(numpy.arange(len(data)),2)

return data[index]

上述代碼適用于 numpy.array(包括多維)、astropy.Table 和 astropy.Column、bcolz、cupy、mxnet.ndarray 等。

該代碼同樣可用于 pandas.Series,但是方式是錯(cuò)誤的:

repeat_each_entry(pandas.Series(data=[0,1,2], index=[3,4,5]))# returns Series with Nones inside

這是一個(gè)兩行代碼。想象一下復(fù)雜系統(tǒng)的行為多么難預(yù)測(cè),有時(shí)一個(gè)函數(shù)就可能導(dǎo)致錯(cuò)誤的行為。明確了解哪些類型方法適合大型系統(tǒng)很有幫助,它會(huì)在函數(shù)未得到此類參數(shù)時(shí)給出提醒。

def repeat_each_entry(data:Union[numpy.ndarray, bcolz.carray]):

如果你有一個(gè)很棒的代碼庫(kù),類型提示工具如 MyPy 可能成為集成流程中的一部分。不幸的是,提示沒有強(qiáng)大到足以為 ndarrays/tensors 提供細(xì)粒度類型,但是或許我們很快就可以擁有這樣的提示工具了,這將是 DS 的偉大功能。

類型提示 → 運(yùn)行時(shí)的類型檢查

默認(rèn)情況下,函數(shù)注釋不會(huì)影響代碼的運(yùn)行,不過它也只能幫你指出代碼的意圖。

但是,你可以在運(yùn)行時(shí)中使用 enforce 等工具強(qiáng)制進(jìn)行類型檢查,這可以幫助你調(diào)試代碼(很多情況下類型提示不起作用)。

@enforce.runtime_validation

def foo(text: str)->None:

print(text)

foo('Hi')# ok

foo(5)# fails

@enforce.runtime_validation

def any2(x:List[bool])->bool:

return any(x)

any ([False,False,True,False])# True

any2([False,False,True,False])# True

any (['False'])# True

any2(['False'])# fails

any ([False,None,"",0])# False

any2([False,None,"",0])# fails

函數(shù)注釋的其他用處

如前所述,注釋不會(huì)影響代碼執(zhí)行,而且會(huì)提供一些元信息,你可以隨意使用。

例如,計(jì)量單位是科學(xué)界的一個(gè)普遍難題,astropy 包提供一個(gè)簡(jiǎn)單的裝飾器(Decorator)來控制輸入量的計(jì)量單位,并將輸出轉(zhuǎn)換成所需單位。

# Python 3

from astropy import units as u

@u.quantity_input()

def frequency(speed: u.meter / u.s, wavelength: u.m)->u.terahertz:

return speed / wavelength

frequency(speed=300_000 * u.km / u.s, wavelength=555* u.nm)

# output: 540.5405405405404 THz, frequency of green visible light

如果你擁有 Python 表格式科學(xué)數(shù)據(jù)(不必要太多),你應(yīng)該嘗試一下 astropy。你還可以定義針對(duì)某個(gè)應(yīng)用的裝飾器,用同樣的方式來控制/轉(zhuǎn)換輸入和輸出。

通過 @ 實(shí)現(xiàn)矩陣乘法

下面,我們實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的機(jī)器學(xué)習(xí)模型,即帶 L2 正則化的線性回歸:

# l2-regularized linear regression: || AX - b ||^2 + alpha * ||x||^2 ->min

# Python 2

X = np.linalg.inv(np.dot(A.T, A)+ alpha * np.eye(A.shape[1])).dot(A.T.dot(b))

# Python 3

X = np.linalg.inv(A.T @ A + alpha * np.eye(A.shape[1]))@(A.T @ b)

下面 Python 3 帶有 @ 作為矩陣乘法的符號(hào)更具有可讀性,且更容易在深度學(xué)習(xí)框架中轉(zhuǎn)譯:因?yàn)橐恍┤?X @ W + b[None, :] 的代碼在 numpy、cupy、pytorch 和 tensorflow 等不同庫(kù)下都表示單層感知機(jī)。

使用 ** 作為通配符

遞歸文件夾的通配符在 Python2 中并不是很方便,因此才存在定制的 glob2 模塊來克服這個(gè)問題。遞歸 flag 在 Python 3.6 中得到了支持。

import glob

# Python 2

found_images = \

glob.glob('/path*.jpg') \

+ glob.glob('/path*.jpg') \

+ glob.glob('/path***.jpg')

# Python 3

found_images = glob.glob('/path*.jpg', recursive=True)

python3 中更好的選擇是使用 pathlib:

# Python 3

found_images = pathlib.Path('/path/').glob('**/*.jpg')

Print 在 Python3 中是函數(shù)

Python 3 中使用 Print 需要加上麻煩的圓括弧,但它還是有一些優(yōu)點(diǎn)。

使用文件描述符的簡(jiǎn)單句法:

print>>sys.stderr,"critical error"# Python 2

print("critical error", file=sys.stderr)# Python 3

在不使用 str.join 下輸出 tab-aligned 表格:

# Python 3

print(*array, sep='\t')

print(batch, epoch, loss, accuracy, time, sep='\t')

修改與重新定義 print 函數(shù)的輸出:

# Python 3

_print =print# store the original print function

defprint(*args,**kargs):

pass# do something useful, e.g. store output to some file

在 Jupyter 中,非常好的一點(diǎn)是記錄每一個(gè)輸出到獨(dú)立的文檔,并在出現(xiàn)錯(cuò)誤的時(shí)候追蹤出現(xiàn)問題的文檔,所以我們現(xiàn)在可以重寫 print 函數(shù)了。

在下面的代碼中,我們可以使用上下文管理器暫時(shí)重寫 print 函數(shù)的行為:

@contextlib.contextmanager

def replace_print():

import builtins

_print =print# saving old print function

# or use some other function here

builtins.print=lambda*args,**kwargs: _print('new printing',*args,**kwargs)

yield

builtins.print= _print

with replace_print():

上面并不是一個(gè)推薦的方法,因?yàn)樗鼤?huì)引起系統(tǒng)的不穩(wěn)定。

print 函數(shù)可以加入列表解析和其它語言構(gòu)建結(jié)構(gòu)。

# Python 3

result = process(x)if is_valid(x)elseprint('invalid item: ', x)

f-strings 可作為簡(jiǎn)單和可靠的格式化

默認(rèn)的格式化系統(tǒng)提供了一些靈活性,且在數(shù)據(jù)實(shí)驗(yàn)中不是必須的。但這樣的代碼對(duì)于任何修改要么太冗長(zhǎng),要么就會(huì)變得很零碎。而代表性的數(shù)據(jù)科學(xué)需要以固定的格式迭代地輸出一些日志信息,通常需要使用的代碼如下:

# Python 2

print('{batch:3} {epoch:3} / {total_epochs:3} accuracy: {acc_mean:0.4f}±{acc_std:0.4f} time: {avg_time:3.2f}'.format(

batch=batch, epoch=epoch, total_epochs=total_epochs,

acc_mean=numpy.mean(accuracies), acc_std=numpy.std(accuracies),

avg_time=time / len(data_batch)

))

# Python 2 (too error-prone during fast modifications, please avoid):

print('{:3} {:3} / {:3} accuracy: {:0.4f}±{:0.4f} time: {:3.2f}'.format(

batch, epoch, total_epochs, numpy.mean(accuracies), numpy.std(accuracies),

time / len(data_batch)

))

樣本輸出:

12012/300 accuracy:0.8180±0.4649 time:56.60

f-strings 即格式化字符串在 Python 3.6 中被引入:

# Python 3.6+

print(f'{batch:3} {epoch:3} / {total_epochs:3} accuracy: {numpy.mean(accuracies):0.4f}±{numpy.std(accuracies):0.4f} time: {time / len(data_batch):3.2f}')

另外,寫查詢語句時(shí)非常方便:

query = f"INSERT INTO STATION VALUES (13, '{city}', '{state}', {latitude}, {longitude})"

「true pision」和「integer pision」之間的明顯區(qū)別

對(duì)于數(shù)據(jù)科學(xué)來說這種改變帶來了便利(但我相信對(duì)于系統(tǒng)編程來說不是)。

data = pandas.read_csv('timing.csv')

velocity = data['distance']/ data['time']

Python 2 中的結(jié)果依賴于『時(shí)間』和『距離』(例如,以米和秒為單位)是否被保存為整數(shù)。

在 Python 3 中,結(jié)果的表示都是精確的,因?yàn)槌ǖ慕Y(jié)果是浮點(diǎn)數(shù)。

另一個(gè)案例是整數(shù)除法,現(xiàn)在已經(jīng)作為明確的運(yùn)算:

n_gifts = money // gift_price # correct for int and float arguments

注意,該運(yùn)算可以應(yīng)用到內(nèi)建類型和由數(shù)據(jù)包(例如,numpy 或 pandas)提供的自定義類型。

嚴(yán)格排序

# All these comparisons are illegal in Python 3

3<'3'

2

(3,4)<(3,None)

(4,5)<[4,5]

# False in both Python 2 and Python 3

(4,5)==[4,5]

防止不同類型實(shí)例的偶然性的排序。

sorted([2,'1',3])# invalid for Python 3, in Python 2 returns [2, 3, '1']

在處理原始數(shù)據(jù)時(shí)幫助發(fā)現(xiàn)存在的問題。

旁注:對(duì) None 的合適檢查是(兩個(gè)版本的 Python 都適用):

if a isnotNone:

pass

if a:# WRONG check for None

pass

自然語言處理的 Unicode

s ='您好'

print(len(s))

print(s[:2])

輸出:

Python 2: 6\n

Python 3: 2\n 您好.

x = u'со'

x +='co'# ok

x +='со'# fail

Python 2 在此失敗了,而 Python 3 可以如期工作(因?yàn)槲以谧址惺褂昧硕砦淖帜福?/p>

在 Python 3 中 strs 是 Unicode 字符串,對(duì)非英語文本的 NLP 處理更加方便。

還有其它有趣的方面,例如:

'a'< type < u'a'# Python 2: True

'a'< u'a'# Python 2: False

from collections importCounter

Counter('Mbelstück')

Python 2: Counter({'\xc3': 2, 'b': 1, 'e': 1, 'c': 1, 'k': 1, 'M': 1, 'l': 1, 's': 1, 't': 1, '\xb6': 1, '\xbc': 1})

Python 3: Counter({'M': 1, '': 1, 'b': 1, 'e': 1, 'l': 1, 's': 1, 't': 1, 'ü': 1, 'c': 1, 'k': 1})

這些在 Python 2 里也能正確地工作,但 Python 3 更為友好。

保留詞典和**kwargs 的順序

在 CPython 3.6+ 版本中,字典的默認(rèn)行為類似于 OrderedDict(在 3.7+版本中已得到保證)。這在字典理解(和其他操作如 json 序列化/反序列化期間)保持順序。

import json

x ={str(i):i for i in range(5)}

json.loads(json.dumps(x))

# Python 2

{u'1':1, u'0':0, u'3':3, u'2':2, u'4':4}

# Python 3

{'0':0,'1':1,'2':2,'3':3,'4':4}

它同樣適用于**kwargs(在 Python 3.6+版本中):它們的順序就像參數(shù)中顯示的那樣。當(dāng)設(shè)計(jì)數(shù)據(jù)流程時(shí),順序至關(guān)重要,以前,我們必須以這樣繁瑣的方式來編寫:

from torch import nn

# Python 2

model = nn.Sequential(OrderedDict([

('conv1', nn.Conv2d(1,20,5)),

('relu1', nn.ReLU()),

('conv2', nn.Conv2d(20,64,5)),

('relu2', nn.ReLU())

]))

# Python 3.6+, how it *can* be done, not supported right now in pytorch

model = nn.Sequential(

conv1=nn.Conv2d(1,20,5),

relu1=nn.ReLU(),

conv2=nn.Conv2d(20,64,5),

relu2=nn.ReLU())

)

注意到了嗎?名稱的唯一性也會(huì)被自動(dòng)檢查。

迭代地拆封

# handy when amount of additional stored info may vary between experiments, but the same code can be used in all cases

model_paramteres, optimizer_parameters,*other_params = load(checkpoint_name)

# picking two last values from a sequence

*prev, next_to_last, last = values_history

# This also works with any iterables, so if you have a function that yields e.g. qualities,

# below is a simple way to take only last two values from a list

*prev, next_to_last, last = iter_train(args)

默認(rèn)的 pickle 引擎為數(shù)組提供更好的壓縮

# Python 2

import cPickle as pickle

import numpy

print len(pickle.dumps(numpy.random.normal(size=[1000,1000])))

# result: 23691675

# Python 3

import pickle

import numpy

len(pickle.dumps(numpy.random.normal(size=[1000,1000])))

# result: 8000162

節(jié)省 3 倍空間,而且速度更快。實(shí)際上,類似的壓縮(不過與速度無關(guān))可以通過 protocol=2 參數(shù)來實(shí)現(xiàn),但是用戶?...

學(xué)習(xí)Python必不可少的幾款好用的Python開發(fā)工具!你會(huì)幾個(gè)? 公司視頻課程

Python 是一門新手友好、功能強(qiáng)大、高效靈活的編程語言,學(xué)會(huì)之后無論是想進(jìn)入數(shù)據(jù)分析、人工智能、網(wǎng)站開發(fā)這些領(lǐng)域,還是希望掌握第一門編程語言,都可以用 Python 來開啟無限未來的無限可能!工欲善其事必先利其器,一個(gè)好的工具能讓起到事半功倍的效果,Python社區(qū)提供了足夠多的優(yōu)秀工具來幫助開發(fā)者更方便的實(shí)現(xiàn)某些想法。今天千鋒武漢Python培訓(xùn)小編推薦下面這幾個(gè)Python開發(fā)工具,相信一定會(huì)給你的工作帶來很多便利。

Python Tutor

Python Tutor 是由 Philip Guo 開發(fā)的一個(gè)免費(fèi)教育工具,可幫助學(xué)生攻克編程學(xué)習(xí)中的基礎(chǔ)障礙,理解每一行源代碼在程序執(zhí)行時(shí)在計(jì)算機(jī)中的過程。通過這個(gè)工具,教師或?qū)W生可以直接在 Web 瀏覽器中編寫 Python 代碼,并逐步可視化地運(yùn)行程序。如果你不知道代碼在內(nèi)存中是如何運(yùn)行的,不妨把它拷貝到Tutor里可視化執(zhí)行一遍,加深理解。

地址:http://pythontutor/

IPython

IPython 是一個(gè) for Humans 的 Python 交互式 shell,用了它之后你就不想再用自帶的 Python shell 了,IPython 支持變量自動(dòng)補(bǔ)全,自動(dòng)縮進(jìn),支持 bash shell 命令,內(nèi)置了許多實(shí)用功能和函數(shù),同時(shí)它也是科學(xué)計(jì)算和交互可視化的最佳平臺(tái)。

地址:https://ipython.org/

Jupyter Notebook

Jupyter Notebook 就像一個(gè)草稿本,能將文本注釋、數(shù)學(xué)方程、代碼和可視化內(nèi)容全部組合到一個(gè)易于共享的文檔中,以 Web 頁(yè)面的方式展示。它是數(shù)據(jù)分析、機(jī)器學(xué)習(xí)的必備工具。

地址:http://jupyter.org/

Anaconda

Python 雖好,可總是會(huì)遇到各種包管理和 Python 版本問題,特別是 Windows 平臺(tái)很多包無法正常安裝,為了解決這些問題,Anoconda 出現(xiàn)了,Anoconda 包含了一個(gè)包管理工具和一個(gè)Python管理環(huán)境,同時(shí)附帶了一大批常用數(shù)據(jù)科學(xué)包,也是數(shù)據(jù)分析的標(biāo)配。

地址:https://anaconda/

Skulpt

Skulpt 是一個(gè)用 Java 實(shí)現(xiàn)的在線 Python 執(zhí)行環(huán)境,它可以讓你輕松在瀏覽器中運(yùn)行 Python 代碼。使用 skulpt 結(jié)合 CodeMirror 編輯器即可實(shí)現(xiàn)一個(gè)基本的在線Python編輯和運(yùn)行環(huán)境。

Win10系統(tǒng)如何搭建Python 3.5.2開發(fā)環(huán)境

因?yàn)楣ぷ餍枨螅晃?windows10正式版 用戶,想要在最新的系統(tǒng)中搭建Python 3.5.2開發(fā)環(huán)境。那么,這該如何操作呢?會(huì)不會(huì)非常復(fù)雜呢?為了幫助大家更好地使用win10系統(tǒng),下面小編就分享搭建和測(cè)試Python 3.5.2開發(fā)環(huán)境的具體方法。

Win10系列軟件最新版本下載

Win10系統(tǒng)正式版立即下載360安全衛(wèi)士Win10版立即下載Win10優(yōu)化大師立即下載具體方法如下:

1、首先從Python官網(wǎng)下載安裝軟件,如下圖,輸入IP地址;

2、找到Download,單擊下面Python 3.5.2進(jìn)入下載頁(yè)面;

3、點(diǎn)擊“windows x86-64 executable installer”進(jìn)行下載;

各個(gè)版本的介紹:

(下面的都是windows系統(tǒng)平臺(tái)的安裝包,x86適合32位操作系統(tǒng);x86-64適合64位操作系統(tǒng))

下面是官網(wǎng)的解釋:

The binaries for AMD64 will also work on processors that implement

the Intel 64 architecture. (Also known as the "x64" architecture, and

formerly known as both "EM64T" and "x86-64".) They will not work on

Intel Itanium Processors (formerly "IA-64").

Windows users: If installing Python 3.5 as a non-privileged user,

you may need to escalate to administrator privileges to install an

update to your C runtime libraries.

Windows users: There are now "web-based" installers for Windows

platforms; the installer will download the needed software components at

installation time.

Windows Users: There are redistributable zip files containing the

Windows builds, making it easy to redistribute Python as part of another

software package. Please see the documentation regarding Embedded Distribution for more information.It is intended for acting as part of another application, rather than being directly accessed by end-users.

可以通過下面3種途徑獲取python:

web-based installer 是需要通過聯(lián)網(wǎng)完成安裝的

executable installer 是可執(zhí)行文件(*.exe)方式安裝

embeddable zip file 嵌入式版本,可以集成到其它應(yīng)用中

4、找到下載后的文件;

5、雙擊安裝文件,點(diǎn)擊下圖所示的自定義安裝“custom installation”;

6、點(diǎn)擊下一步,“Next”;

7、此處可更換安裝目錄,然后單擊安裝“install”;

8、等待自動(dòng)安裝……

9、安裝成功!

運(yùn)行測(cè)試:

1、啟動(dòng)Python shell,在“搜索Web和Windows”中輸入:idle;

2、就會(huì)啟動(dòng)python IDLE,可以交互運(yùn)行python;

3、同樣可以按“Ctrl + N”打開IDLE開發(fā)工具,輸入程序代碼;

4、編寫完程序后,“Ctrl + S”保存,然后如大多數(shù)編程軟件一樣,按“F5”運(yùn)行程序;

5、如果程序沒有問題,此時(shí)在Idle中打印出“Hello World!”。

Win10搭建Python 3.5.2開發(fā)環(huán)境教程就介紹到這里了。剛剛使用windows10正式版的用戶們,如果也有同樣需求的話,不妨按照上述步驟操作自己手動(dòng)一遍。

好了,今天的知識(shí)就分享到這里,歡迎關(guān)注愛編程的南風(fēng),私信關(guān)鍵詞:學(xué)習(xí)資料,獲取更多學(xué)習(xí)資源,如果文章對(duì)你有有幫助,請(qǐng)收藏關(guān)注,在今后與你分享更多學(xué)習(xí)python的文章。同時(shí)歡迎在下面評(píng)論區(qū)留言如何學(xué)習(xí)python。

Python,針對(duì)指定文件類型,過濾空行和注釋,統(tǒng)計(jì)行數(shù) 互聯(lián)網(wǎng)視頻課程

img

寵物

關(guān)注

寫在前面:

參考網(wǎng)絡(luò)上代碼編輯而成,無技術(shù)含量,可自行定制:

目前親測(cè)有效,若有待完善之處,還望指出!

強(qiáng)調(diào):將此統(tǒng)計(jì)py腳本放置項(xiàng)目的根目錄下執(zhí)行即可。

1、遍歷文件,遞歸遍歷文件夾中的所有

2、指定文件類型:項(xiàng)目的代碼行數(shù),故只考慮.py文件,當(dāng)然也可在指定的文件類型列表whitelist中添加其他類型

3、過濾空行和注釋,注意采用的讀取文件模式為‘rb’

完整源碼:

測(cè)試對(duì)象樣本,test.py:

結(jié)果為:2

自學(xué)python編程筆記之:python的注釋 流量視頻課程

img

Honoria

關(guān)注

python中有兩種注釋:

看以下程序示例(未使用注釋):

看以下程序示例(使用注釋):

一、注釋的作用:

增加程序的可讀性,讓開發(fā)者或后續(xù)接手程序進(jìn)行維護(hù)修改的程序員提供可讀性。

好的程序代碼通常有50%是注釋!

只要是被注釋的代碼都不會(huì)被執(zhí)行!

二、注釋的分類:

2.1 單行注釋:

以井號(hào)“#”符號(hào)開頭,其右邊的都是注釋,#字符開頭的都是單行注釋,內(nèi)容不能換行,如果注釋內(nèi)容換行了,那么要在新的一行的,行首加一個(gè)#

如:

#以下代碼用來打打印一個(gè)信息

print("hello world")

#這里是單行注釋

#這是另一單行注釋

2.2 多行注釋:

三個(gè)單引號(hào)或三個(gè)雙引號(hào)之間的

'''

print("hello world")

print("hello world")

print("hello world")

print("hello world")

'''

"""

三個(gè)雙引號(hào)之間的內(nèi)容都是注釋

print("hello world")

print("hello world")

print("hello world")

"""

三、相關(guān)錯(cuò)誤提示

代碼:

#coding=utf-8

#這是一行注釋

print("hello world")

'''

三個(gè)單引號(hào)之間的內(nèi)容都是注釋

print("hello world")

print("hello world")

print("hello world")

'''

"""

三個(gè)雙引號(hào)之間的內(nèi)容都是注釋

print("hello world")

print("hello world")

print("hello world")

"""

執(zhí)行以上代碼,會(huì)提示如下錯(cuò)誤:

SyntaxError: (unicode error) 'utf-8' codec can't decode

這是因?yàn)槲募鎯?chǔ)的格式是ANSI,只需用notepad++打開代碼文件,以UTF-8格式編碼保存即可。

菜鳥學(xué)Python之二:關(guān)于注釋的那些事 公司視頻課程

img

齊碧

關(guān)注

菜鳥學(xué)Python之二:關(guān)于注釋的那些事

大家好,我是@愛玩電腦,今天跟大家一起零基礎(chǔ)入門學(xué)習(xí)Python的第二個(gè)知識(shí)點(diǎn),關(guān)于注釋的那些事,純粹零基礎(chǔ)入門,高手繞行。

鎮(zhèn)樓圖

普遍認(rèn)為,在程序代碼中寫注釋是很重要的。注釋的作用我了解的大概有二個(gè):一是對(duì)你寫的代碼進(jìn)行說明,免得自己過一段時(shí)間后忘記寫代碼時(shí)候的思路了,或者別人接手你的代碼,完全搞不清楚你寫的什么玩意兒;二是臨時(shí)把代碼禁用掉,方便調(diào)試程序。當(dāng)然,也有高手聲稱好的代碼就是注釋,壞的注釋反而影響代碼美觀,反正是見仁見智,我們且不去爭(zhēng)辯,先來看看Python中添加注釋的方法吧。

一、單行注釋

單行注釋的符號(hào)是"#",在程序段中輸入井號(hào)后,整行的句子都變成注釋語句了。

我們?cè)贗DLE中輸入如下代碼試試:

圖一 單行注釋

按F5,程序運(yùn)行結(jié)果是這樣的:

圖二 運(yùn)行結(jié)果

如果我們?cè)诘诙€(gè)print語句前加上井號(hào),

圖三 把語句給注釋掉

可以看到第二句print語句全部變成紅色了。具體效果你可以自己試試。

二、多行注釋

"#"在Python中只能用于注釋一行語句,如果要注釋一大段語句,用"#"來一句句的注釋就顯得太麻煩了,在Python中可以使用三個(gè)引號(hào)來進(jìn)行多行注釋的操作,如下圖:

圖四 多行注釋

英文輸入法下面的三個(gè)雙引號(hào)效果也是一樣的。

好吧,《菜鳥學(xué)Python之 二:關(guān)于注釋的那些事》就講到這里。文章由@愛玩電腦原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

Python的編碼注釋 -*- coding:utf-8 -* 推廣視頻課程

img

賁語薇

關(guān)注

如果要在python2的py文件里面寫中文,則必須要添加一行聲明文件編碼的注釋,否則python2會(huì)默認(rèn)使用ASCII編碼。

[python] view plain copy

# -*- coding:utf-8 -*-

問題就來了,為什么要如此聲明?

首先請(qǐng)參考python的PEP http://python.org/dev/peps/pep-0263/

概要如下

1.必須將編碼注釋放在第一行或者第二行

2.可選格式有

[python] view plain copy

# coding=

[python] view plain copy

#!/usr/bin/python # -*- coding: -*-

[python] view plain copy

#!/usr/bin/python # vim: set fileencoding=:

但是再往下看,發(fā)現(xiàn)其實(shí)只要注釋里面有coding 和對(duì)應(yīng)的編碼就可以了,例如

[python] view plain copy

#!/usr/bin/python # vim: set fileencoding=:

所以搞了半天對(duì)最標(biāo)準(zhǔn)的做法也有點(diǎn)糊涂了。

后來想了想,看了下VIM中對(duì)python的語法高亮文件,里面把如下的正則表達(dá)式確定為編碼聲明

[plain] view plain copy

\%^.*\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$

對(duì)于這個(gè)正則有些有點(diǎn)看不懂,但是大致如下必須有coding:[編碼]或者coding=[編碼]才行,這個(gè)應(yīng)該可以視作為標(biāo)準(zhǔn)的聲明方式吧。

但是為什么通常這種方式呢?

[python] view plain copy

# -*- coding:utf-8 -*-

答案在PEP-0263里面有所提及,那就是Emacs等編輯器使用這種方式進(jìn)行編碼聲明。

話說PEP里面很多東西都是很值得參考的畢竟可以知道為什么程序這樣設(shè)計(jì)。

python入門——注釋的妙用 營(yíng)銷視頻課程

img

糜媚

關(guān)注

堅(jiān)持每天更新,幫助入門python

小伙伴們,夜深了,給大家講一講python注釋的吧。大家如果學(xué)習(xí)過c語言,就會(huì)知道程序的注釋有什么用。這里多提一句吧,C語言的注釋分兩種,單行注釋和多行注釋。C語言的單行注釋是最常用的是//,多行注釋最常用的是

好了,言歸正傳我們繼續(xù)來學(xué)習(xí)python吧,python常用單行注釋是#,常用多行注釋是三對(duì)單引號(hào)''' '''

全理論太抽象,我們一起來看一看例子吧~~~

一、單行注釋

單行注釋

第一個(gè)print

print 'woaipython','hello,world'

打印出來

woaipython hello,world

我們加上注釋符#后,

print 'woaipython'#,'hello,world'

打印出來

woaipython

我們可以發(fā)現(xiàn),注釋符#后的代碼是不會(huì)執(zhí)行的。

二、多行注釋

首先,我們來寫一個(gè)有多行的小程序。

rint 'woaipython'print 'ilovepython'print 'hello'print 'world'print 'python'

我們運(yùn)行一下這個(gè)小程序

我么可以看見打印出了許多數(shù)據(jù),接下來我們給第2~4行加上多行注釋

print 'woaipython'''' print 'ilovepython'print 'hello'print 'world' '''print 'python'

運(yùn)行一下

我們可以看見只有第一行和第五行顯示了。我們注釋掉的2~4行沒運(yùn)行。

總結(jié)一下,注釋符除了望文生義作注釋用、解釋程序意思的作用外,還可以把你不想運(yùn)行也不想刪除的程序段給屏蔽起來。

注:剛剛使用的編輯器是gnome桌面自帶的gedit編輯器,需要先建一個(gè)拓展名為.py文件(命令:touch python.py)。編寫完后保存,再使用命令python python.py就可以打印結(jié)果了。

每天學(xué)一點(diǎn),積少成多。

后期會(huì)循序漸進(jìn)、由淺入深的講解python知識(shí),如果想學(xué)習(xí)python入門,歡迎訂閱。

如果還有不明白的小伙伴,歡迎留言評(píng)論或私信告訴我。

Python中如何添加注釋?Python注釋形式 互聯(lián)網(wǎng)視頻課程

注釋是對(duì)一段代碼的解釋和說明,可提高程序代碼的可讀性,讓人們能夠更加輕松地了解代碼,尤其在大型項(xiàng)目開發(fā)和團(tuán)隊(duì)項(xiàng)目中,注釋是必不可少的!

任何編程語言都少不了注釋,Python也不例外,以下是Python注釋的具體用法:

1. 單行注釋

Python編程語言的單行注釋常以#開頭,單行注釋可以作為單獨(dú)的一行放在被注釋代碼行之上,也可以放在語句或者表達(dá)式之后。

實(shí)例:

# -*- coding: UTF-8 -*-

print ("hello world!"); #您好,世界

2. 多行注釋

Python中多行注釋使用三個(gè)單引號(hào)(’’’)或者三個(gè)雙引號(hào)(”””)來標(biāo)記,而實(shí)際上這是多行字符串的書寫方式,并不是Python本身提倡的多行注釋方法。

實(shí)例:

'''

這是多行注釋,使用單引號(hào)。

這是多行注釋,使用單引號(hào)。

'''

"""

這是多行注釋,使用雙引號(hào)。

這是多行注釋,使用雙引號(hào)。

"""

3. 編碼注釋

在進(jìn)行Python開發(fā)時(shí),需進(jìn)行編碼聲明,如采用UTF-8編碼,需在源碼上方進(jìn)行 # -*- coding: UTF-8 -*- 聲明,從Python3開始,Python默認(rèn)使用UTF-8編碼,所以Python3.x的源文件不需要特殊聲明UTF-8編碼。

4. 平臺(tái)注釋

如果需要使Python程序運(yùn)行在Windows平臺(tái)上,需在Python文件的上方加上 #!/usr/bin/python 注釋說明。

Python注釋除了可以起到說明文檔的作用外,還可以進(jìn)行代碼的調(diào)試,將一部分代碼注釋掉,對(duì)剩余的代碼進(jìn)行排查,從而找出問題所在,進(jìn)行代碼的完善!

img

TOP