文章目錄
python影片教學)
一、小數保留指定位元小數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'>
易知,這種方法會進行四捨五入,但是將浮點型轉換成了字串值,已不再是原始的數值。
2.format函數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'>
同理,這種方法也會進行四捨五入,但是將浮點型轉換成了字串值,已不再是原始的數值。
3.round()函數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()函數最後得到的是數值(浮點型或整型),但是在「舍」和「入」的規律上不一定:
(1)round(x,n)函數中,是否進位或四捨五入,取決於n位以及n 1位小數的值 (2)只有當n 1位數字是5的時候,容易混淆,如果n為偶數,則n 1位數是5,則進位,例如round(1.23456,3)最終變為1.235
(3)如果n為奇數,則n 1位是數5,那不進位,例如round(2.355,2),最終為2.35
(4)如果n為0,即沒有填寫n的時候,最終結果與上面相反,即整數部分為偶數的時候,小數位5不進位,例如(round(2.5)變成2)。
(5)整數部分為奇數的時候,小數位5進位。 (round(3.5)變成4)
a = int(1.23456 * 1000) / 1000print(a)
列印
這種方法簡單粗暴,直接去掉後邊的,不管是否大於5。
1.type():
a = 1.23print(type(a))
列印
。
原型為
isinstance(x, A_tuple),<pre class="brush:php;toolbar:false">a = 1.23tp = isinstance(a,float)print(tp)</pre>
列印
。
使用變數的
__class__.__name__屬性,這也是type()
方法的實質:<pre class="brush:php;toolbar:false">num = 1.23print(num.__class__.__name__)</pre>
列印:
float三、Python中的類別方法(@classmethod)
python做物件導向程式設計的時候,經常需要使用
classmethod類別方法,這並不是類別中的方法。 類別方法也算一種實用的技巧,簡單描述之:「類別方法讓類別模板具有記憶力」。
類別模板就是我們所定義的類別。在普通情況下,不使用類別方法對類別進行實例化,類別本身是不具有記憶性的。只是當一個靜態模板被套用多次而已。如果我們想讓類別在每一次實例化之後,都能記載一些記憶,會對很多操作很有用。
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這個類別進行實例化2次,每個實例的id都不一樣。這就依賴類別方法來實現了:首先,用
@classmethod描述類別方法,然後用"cls"代表本類。類別方法對類別屬性的處理是有記憶性的。 要注意的是,類別方法處理的變數一定要是類別變數。因為在類別方法裡你用不了self來尋址實例變量,所以需要把類別變數放到最前面描述,如上面的"id=0"所示。類別變數是可以被self存取的,所以,在類別變數定義好了以後,不需要在_init_函數裡對類別變數再一次描述。所以,上面程式碼裡self.id不一定需要。
#str.format對字串進行格式化,
{:{:>x}為右對齊,<code>{:^x}
為居中),少於x位元自動補齊(默認為空格補齊),但是對於中文字符並不能很好地支持,所以會導致有多行中文字符串時出現不能對齊的現象,需要考慮到字符串所佔長度並將中文字符串進行編碼後再計算。 <pre class="brush:php;toolbar:false">#name是包含中文的字符串,22是整个字符串一行的总长度,一般要顾及测试才能得到,\t后的x是一标记字符,可换为别的所需的字符串print('[{string:<{len}}\tx&#39;.format(string=string+&#39;]&#39;,len=22-len(string.encode(&#39;GBK&#39;))+len(string)))</pre>
可參考https://blog.csdn.net/excaliburrr/article/details/76794451五、datetime模組timedelta類別的使用timedelta对象表示两个不同时间之间的差值, 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。 所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位: 然后对这3个值进行标准化,使得它们的表示是唯一的: 类属性: 实例方法和属性: 更多关于Python对日期、时间的处理可参考https://www.jb51.net/article/105840.htm。 六、获取抛出的异常具体信息 很多时候,在Python运行抛出异常并接收到之后需要显示异常的具体信息,包括异常内容、异常所在的行数和异常所在的Python文件等等,分别使用 打印: 七、使用BeautifulSoup库去掉字符串中的HTML标签 有时候,字符串中含有HTML标签,如 需要得到 打印: 显然,此时已经去掉了字符串中的HTML标签。 相关免费学习推荐:python教程(视频) 以上是Python 程式設計開發 實用經驗與技巧大放異彩的詳細內容。更多資訊請關注PHP中文網其他相關文章!
如果使用time模块对时间进行算术运算,只能将字符串格式的时间和struct_time格式的时间对象先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date
, datetime.time
和datetime.datetime
对象做算术运算,且两个时间之间的差值单位也更加容易控制。
datetime.timedelta类的定义:class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
类属性名称 描述 timedelta.min timedelta(-999999999) timedelta.max timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) timedelta.resolution timedelta(microseconds=1) 实例方法/属性名称 描述 td.days 天 [-999999999, 999999999] td.seconds 秒 [0, 86399] td.microseconds 微秒 [0, 999999] td.total_seconds() 时间差中包含的总秒数,等价于: td / timedelta(seconds=1) 方法/属性 描述 datetime.datetime.now() 返回当前本地时间(datetime.datetime对象实例) datetime.datetime.fromtimestamp(timestamp) 返回指定时间戳对应的时间(datetime.datetime对象实例) datetime.timedelta() 返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作 >>> import datetime>>>>>> datetime.timedelta(365).total_seconds() # 一年包含的总秒数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小时后datetime.datetime(2020, 1, 19, 14, 17, 0, 214877)>>> dt + datetime.timedelta(hours=-3) # 3小时前datetime.datetime(2020, 1, 19, 8, 17, 0, 214877)>>> dt + datetime.timedelta(hours=3, seconds=30) # 3小时30秒后 datetime.datetime(2020, 1, 19, 14, 17, 30, 214877)
args[0]
、__traceback__.tb_lineno
和__traceback__.tb_frame.f_globals["__file__"]
属性即可,示意如下:def get_exception_info():
try:
s = 2 / 0
except Exception as e:
print('异常内容:', e.args[0])
print('异常行数:', e.__traceback__.tb_lineno)
print('异常文件:', e.__traceback__.tb_frame.f_globals["__file__"])get_exception_info()
异常内容: pision by zero
异常行数: 8异常文件: XXX/test.py
text = """<p>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""
'\nTitle\nA long text........ \n a link \n'
,可以使用正则表达式匹配,但是稍嫌麻烦,此时可以直接使用BeautifulSoup库进行转化,更加简单,如下:from bs4 import BeautifulSoup
text = """<p>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</p>"""clean_text = BeautifulSoup(text, "lxml").textprint(clean_text)
Title
A long text........
a link