ホームページ >バックエンド開発 >Python チュートリアル >Pythonプログラミング開発の実務経験とスキルを公開
#記事ディレクトリ
#1. 小数点は指定された小数点以下の桁に保持する必要がありますPython ビデオ チュートリアル)1. 小数点は指定された小数点以下の桁に保持する必要があります
1.%f メソッド
f = 1.23456f1 = '%.4f' % f f2 = '%.2f' % fprint(f1,type(f1))print(f2,type(f2))
Print1.2346 <class 'str'>1.23 <class 'str'>
このメソッドは丸めますが、浮動小数点数を変換することは簡単にわかります。ポイント型を文字列値に変換すると、元の値ではなくなります。
f = 1.23456f1 = format(f,'.4f')f2 = format(f,'.2f')print(f1,type(f1))print(f2,type(f2))
Print1.2346 <class 'str'>1.23 <class 'str'>
同様に、このメソッドも丸められますが、浮動小数点型は文字列値に変換されます。はプリミティブな数値ではなくなりました。
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))
Print1.235 <class 'float'>2.35 <class 'float'>4 <class 'int'>2 <class 'int'>
round() 関数が最終的に数値 (浮動小数点数) を取得していることがわかります。 point 型や integer 型など)、「四捨五入」と「四捨五入」の規則は必ずしも当てはまりません。
(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 は無効になります。たとえば、ラウンド(2.5)が 2 になります)。
(5) 整数部が奇数の場合、小数点以下は5に切り上げます。 (丸め (3.5) は 4 になります)
4.
a = int(1.23456 * 1000) / 1000print(a)
を直接切り捨てて 1.234
を出力する この方法は単純かつ粗雑で、 direct 5 より大きいかどうかに関係なく、次のものを削除します。2. 変数のデータ型を決定します
1.type():
a = 1.23print(type(a))
Print <クラス 'float'>。
2.isinstance()
プロトタイプは isinstance(x, A_tuple),
a = 1.23tp = isinstance(a,float)print(tp)
Print です真実 ###。
3.class.__name__ 属性
__class__.__name__ 属性 (これも type()#) を使用します。 ## メソッドの本質:
num = 1.23print(num.__class__.__name__)
Print: <pre class="brush:php;toolbar:false">float</pre>
3. 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)
Print<pre class="brush:php;toolbar:false">12</pre>
Man クラスを 2 回インスタンス化します。各インスタンスの ID は異なります。これは、クラス メソッドに依存することによって実現されます。まず、
@classmethod
を使用してクラス メソッドを記述し、次に「cls」を使用してこのクラスを表します。クラスメソッドによるクラス属性の処理を記憶します。
クラスメソッドで処理される変数はクラス変数である必要があることに注意してください。 self を使用してクラス メソッド内のインスタンス変数をアドレス指定することはできないため、上記の「id=0」に示すように、クラス変数を説明の先頭に置く必要があります。クラス変数は自身でアクセスできるため、クラス変数を定義した後、_init_関数内に再度クラス変数を記述する必要はありません。したがって、上記のコードでは self.id は必ずしも必要ではありません。
4. str.format とタブ文字 \t中国語の配置を設定します
str.format は文字列
{:#name是包含中文的字符串,22是整个字符串一行的总长度,一般要顾及测试才能得到,\t后的x是一标记字符,可换为别的所需的字符串print('[{string:<{len}}\tx'.format(string=string+']',len=22-len(string.encode('GBK'))+len(string)))
詳細については、https://blog.csdn.net/excaliburrr/article/details/76794451
5. datetime モジュールでの timedelta クラスの使用## を参照してください。 #<p>timedelta对象表示两个不同时间之间的差值, 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。<br/> 如果使用time模块对时间进行算术运算,只能将字符串格式的时间和struct_time格式的时间对象先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对<code>datetime.date
, datetime.time
和datetime.datetime
对象做算术运算,且两个时间之间的差值单位也更加容易控制。class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位:
然后对这3个值进行标准化,使得它们的表示是唯一的:
类属性:
类属性名称 | 描述 |
---|---|
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)
更多关于Python对日期、时间的处理可参考https://www.jb51.net/article/105840.htm。
六、获取抛出的异常具体信息
很多时候,在Python运行抛出异常并接收到之后需要显示异常的具体信息,包括异常内容、异常所在的行数和异常所在的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('异常内容:', 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
七、使用BeautifulSoup库去掉字符串中的HTML标签
有时候,字符串中含有HTML标签,如
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
显然,此时已经去掉了字符串中的HTML标签。
相关免费学习推荐:python教程(视频)
以上がPythonプログラミング開発の実務経験とスキルを公開の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。