成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python編程開發(fā)技巧

這篇文章給大家分享的是有關(guān)Python編程開發(fā)技巧的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、新干ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的新干網(wǎng)站制作公司

一、小數(shù)保留指定位小數(shù)

1.%f 方法

f = 1.23456f1 = '%.4f' % f
f2 = '%.2f' % fprint(f1,type(f1))print(f2,type(f2))

打印

1.2346 <class 'str'>1.23 <class 'str'>

易知,這種方法會進(jìn)行四舍五入,但是將浮點(diǎn)型轉(zhuǎn)化成了字符串值,已不再是原始的數(shù)值。

2.format函數(shù)

f = 1.23456f1 = format(f,'.4f')f2 = format(f,'.2f')print(f1,type(f1))print(f2,type(f2))

打印

1.2346 <class 'str'>1.23 <class 'str'>

同理,這種方法也會進(jìn)行四舍五入,但是將浮點(diǎn)型轉(zhuǎn)化成了字符串值,已不再是原始的數(shù)值。

3.round()函數(shù)

a = 1.23456b = 2.355c = 3.5d = 2.5a1 = round(a, 3)b1 = round(b, 2)c1 = round(c)d1 = round(d)print(a1,type(a1))print(b1,type(b1))print(c1,type(c1))print(d1,type(d1))

打印

1.235 <class 'float'>2.35 <class 'float'>4 <class 'int'>2 <class 'int'>

可以看出,round()函數(shù)最后得到的是數(shù)值(浮點(diǎn)型或整型),但是在“舍”和“入”的規(guī)律上不一定:
(1)round(x,n)函數(shù)中,是否進(jìn)位或四舍五入,取決于n位以及n+1位小數(shù)的值
(2)只有當(dāng)n+1位數(shù)字是5的時(shí)候,容易混淆,如果n為偶數(shù),則n+1位數(shù)是5,則進(jìn)位,例如round(1.23456,3)最終變?yōu)?.235
(3)如果n為奇數(shù),則n+1位是數(shù)5,那不進(jìn)位,例如round(2.355,2),最終為2.35
(4)如果n為0,即沒有填寫n的時(shí)候,最終結(jié)果與上面相反,即整數(shù)部分為偶數(shù)的時(shí)候,小數(shù)位5不進(jìn)位,例如(round(2.5)變?yōu)?)。
(5)整數(shù)部分為奇數(shù)的時(shí)候,小數(shù)位5進(jìn)位。(round(3.5)變?yōu)?)

4.直接截?cái)?/strong>

a = int(1.23456 * 1000) / 1000print(a)

打印1.234
這種方法簡單粗暴,直接去掉后邊的,不管是否大于5。

二、判斷變量的數(shù)據(jù)類型

1.type():

a = 1.23print(type(a))

打印<class 'float'>。

2.isinstance()

原型為isinstance(x, A_tuple),

a = 1.23tp = isinstance(a,float)print(tp)

打印True。

3.class.__name__屬性

使用變量的__class__.__name__屬性 ,這也是type()方法的實(shí)質(zhì):

num = 1.23print(num.__class__.__name__)

打?。?/p>

float

三、Python中的類方法(@classmethod)

python做面向?qū)ο缶幊痰臅r(shí)候,經(jīng)常需要使用classmethod類方法,這并不是類中的方法。
類方法也算一種實(shí)用的技巧,簡單描述之:“類方法讓類模板具有記憶力”。
類模板就是我們所定義的類。在普通情況下,不使用類方法對類進(jìn)行實(shí)例化,類本身是不具有記憶性的。只是當(dāng)一個(gè)靜態(tài)模板被套用多次而已。如果我們想讓類在每一次實(shí)例化之后,都能記載一些記憶,會對很多操作很有用。

class Man:
    id = 0 # 類變量
    def __init__(self, name):
        self.name = name
        self.id = self.id_number()
 
    @classmethod
    def id_number(cls):
        cls.id += 1
        return cls.id
 a = Man('A')print(a.id)b = Man('B')print(b.id)

打印

12

對Man這個(gè)類進(jìn)行實(shí)例化2次,每個(gè)實(shí)例的id都不一樣。這就依靠類方法來實(shí)現(xiàn)了:首先,用@classmethod描述類方法,然后用"cls"代表本類。類方法對類屬性進(jìn)行的處理是有記憶性的。

需要注意的是,類方法處理的變量一定要是類變量。因?yàn)樵陬惙椒ɡ锬阌貌涣藄elf來尋址實(shí)例變量,所以需要把類變量放到最前面描述,如上面的"id=0"所示。類變量是可以被self訪問的,所以,在類變量定義好了以后,不需要在_init_函數(shù)里對類變量再一次描述。所以,上面代碼里self.id不一定需要。

四、str.format與制表符\t設(shè)置中文對齊

str.format對字符串進(jìn)行格式化,{:<x}的語法表示左對齊,{:>x}為右對齊,{:^x}為居中),少于x位自動補(bǔ)齊(默認(rèn)為空格補(bǔ)齊),但是對于中文字符并不能很好地支持,所以會導(dǎo)致有多行中文字符串時(shí)出現(xiàn)不能對齊的現(xiàn)象,需要考慮到字符串所占長度并將中文字符串進(jìn)行編碼后再計(jì)算。

#name是包含中文的字符串,22是整個(gè)字符串一行的總長度,一般要顧及測試才能得到,\t后的x是一標(biāo)記字符,可換為別的所需的字符串print('[{string:<{len}}\tx'.format(string=string+']',len=22-len(string.encode('GBK'))+len(string)))

具體可參考https://blog.csdn.net/excaliburrr/article/details/76794451

五、datetime模塊timedelta類的使用

timedelta對象表示兩個(gè)不同時(shí)間之間的差值, 這個(gè)差值的單位可以是:天、秒、微秒、毫秒、分鐘、小時(shí)、周。
如果使用time模塊對時(shí)間進(jìn)行算術(shù)運(yùn)算,只能將字符串格式的時(shí)間和struct_time格式的時(shí)間對象先轉(zhuǎn)換為時(shí)間戳格式,然后對該時(shí)間戳加上或減去n秒,最后再轉(zhuǎn)換回struct_time格式或字符串格式,這顯然很不方便。而datetime模塊提供的timedelta類可以讓我們很方面的對datetime.date, datetime.timedatetime.datetime對象做算術(shù)運(yùn)算,且兩個(gè)時(shí)間之間的差值單位也更加容易控制。
datetime.timedelta類的定義:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)

所有參數(shù)都是默認(rèn)參數(shù),因此都是可選參數(shù)。參數(shù)的值可以是整數(shù)或浮點(diǎn)數(shù),也可以是正數(shù)或負(fù)數(shù)。內(nèi)部值存儲days、seconds 和 microseconds,其他所有參數(shù)都將被轉(zhuǎn)換成這3個(gè)單位:

  • 1毫秒轉(zhuǎn)換為1000微秒

  • 1分鐘轉(zhuǎn)換為60秒

  • 1小時(shí)轉(zhuǎn)換為3600秒

  • 1周轉(zhuǎn)換為7天

然后對這3個(gè)值進(jìn)行標(biāo)準(zhǔn)化,使得它們的表示是唯一的:

  • microseconds : [0, 999999]

  • seconds : [0, 86399]

  • days : [-999999999, 999999999]

類屬性

類屬性名稱描述
timedelta.mintimedelta(-999999999)
timedelta.maxtimedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolutiontimedelta(microseconds=1)

實(shí)例方法和屬性

實(shí)例方法/屬性名稱描述
td.days天 [-999999999, 999999999]
td.seconds秒 [0, 86399]
td.microseconds微秒 [0, 999999]
td.total_seconds()時(shí)間差中包含的總秒數(shù),等價(jià)于: td / timedelta(seconds=1)
方法/屬性描述
datetime.datetime.now()返回當(dāng)前本地時(shí)間(datetime.datetime對象實(shí)例)
datetime.datetime.fromtimestamp(timestamp)返回指定時(shí)間戳對應(yīng)的時(shí)間(datetime.datetime對象實(shí)例)
datetime.timedelta()返回一個(gè)時(shí)間間隔對象,可以直接與datetime.datetime對象做加減操作
>>> import datetime>>>>>> datetime.timedelta(365).total_seconds() # 一年包含的總秒數(shù)31536000.0>>> dt = datetime.datetime.now()>>> dt + datetime.timedelta(3) # 3天后datetime.datetime(2020, 1, 22, 11, 17, 0, 214877)>>> dt + datetime.timedelta(-3) # 3天前datetime.datetime(2020, 1, 16, 11, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3) # 3小時(shí)后datetime.datetime(2020, 1, 19, 14, 17, 0, 214877)>>> dt + datetime.timedelta(hours=-3) # 3小時(shí)前datetime.datetime(2020, 1, 19, 8, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3, seconds=30) # 3小時(shí)30秒后 datetime.datetime(2020, 1, 19, 14, 17, 30, 214877)

更多關(guān)于Python對日期、時(shí)間的處理可參考https://www.jb51.net/article/105840.htm。

六、獲取拋出的異常具體信息

很多時(shí)候,在Python運(yùn)行拋出異常并接收到之后需要顯示異常的具體信息,包括異常內(nèi)容、異常所在的行數(shù)和異常所在的Python文件等等,分別使用args[0]、__traceback__.tb_lineno__traceback__.tb_frame.f_globals["__file__"]屬性即可,示意如下:

def get_exception_info():
    try:
        s = 2 / 0
    except Exception as e:
        print('異常內(nèi)容:', e.args[0])
        print('異常行數(shù):', e.__traceback__.tb_lineno)
        print('異常文件:', e.__traceback__.tb_frame.f_globals["__file__"])get_exception_info()

打?。?/p>

異常內(nèi)容: pision by zero
異常行數(shù): 8異常文件: XXX/test.py

七、使用BeautifulSoup庫去掉字符串中的HTML標(biāo)簽

有時(shí)候,字符串中含有HTML標(biāo)簽,如

text = """<p>
<h2>Title</h2>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""

需要得到'\nTitle\nA long text........ \n a link \n',可以使用正則表達(dá)式匹配,但是稍嫌麻煩,此時(shí)可以直接使用BeautifulSoup庫進(jìn)行轉(zhuǎn)化,更加簡單,如下:

from bs4 import BeautifulSoup

text = """<p>
<h2>Title</h2>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""clean_text = BeautifulSoup(text, "lxml").textprint(clean_text)

打?。?/p>

Title
A long text........ 
 a link

顯然,此時(shí)已經(jīng)去掉了字符串中的HTML標(biāo)簽。

感謝各位的閱讀!關(guān)于“Python編程開發(fā)技巧”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

分享文章:Python編程開發(fā)技巧
文章起源:http://jinyejixie.com/article38/gcehpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、關(guān)鍵詞優(yōu)化、App設(shè)計(jì)、網(wǎng)站營銷、網(wǎng)站策劃、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

沂水县| 西乌珠穆沁旗| 呼玛县| 夏津县| 金溪县| 合阳县| 清徐县| 东辽县| 和静县| 蓬安县| 夏津县| 台北县| 松潘县| 宝应县| 中超| 阆中市| 孟津县| 高尔夫| 巴塘县| 涿鹿县| 周至县| 专栏| 六安市| 田东县| 汽车| 泸西县| 军事| 桐乡市| 芜湖县| 呈贡县| 和田市| 阿克| 沙河市| 阿拉善右旗| 泸西县| 沙田区| 五峰| 侯马市| 富阳市| 呼和浩特市| 西平县|