기사 디렉토리
(무료 학습 추천: python 동영상 튜토리얼)
1. 소수점 이하 자릿수를 지정하세요.
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이고, 예를 들어 반올림(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로 반올림됩니다. (반올림(3.5)은 4가 됨)
4. 직접 자르기
a = int(1.23456 * 1000) / 1000print(a)
1.234
1.234
这种方法简单粗暴,直接去掉后边的,不管是否大于5。
二、判断变量的数据类型
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()
方法的实质:
num = 1.23print(num.__class__.__name__)
打印:
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与制表符t设置中文对齐
str.format对字符串进行格式化,{:<x}
的语法表示左对齐,{:>x}
为右对齐,{:^x}
인쇄 이 방법은 간단하고 대략적입니다. 5보다 큰지 여부에 관계없이 다음을 제거하면 됩니다.
1.type():🎜🎜
#name是包含中文的字符串,22是整个字符串一行的总长度,一般要顾及测试才能得到,\t后的x是一标记字符,可换为别的所需的字符串print('[{string:<{len}}\tx'.format(string=string+']',len=22-len(string.encode('GBK'))+len(string)))🎜
<class 'float'>를 인쇄합니다. 🎜🎜🎜2.isinstance()🎜🎜🎜프로토타입은 <code>isinstance(x, A_tuple)
이고, 🎜class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)🎜는
True
를 인쇄합니다. 🎜🎜🎜3.class.__name__ attribute🎜🎜🎜type()
메서드의 핵심이기도 한 변수의 __class__.__name__
특성을 사용하세요. 🎜>>> 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)🎜인쇄: 🎜
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()🎜🎜3. Python의 클래스 메서드(@classmethod)🎜🎜🎜Python에서 객체 지향 프로그래밍을 수행할 때 클래스 메서드가 아닌
classmethod
클래스 메서드를 사용해야 하는 경우가 많습니다. 수업의 방법. 🎜 클래스 메서드는 실용적인 기술이기도 합니다. 간단히 설명하면 "클래스 메서드는 클래스 템플릿을 기억에 남게 만듭니다." 🎜 클래스 템플릿은 우리가 정의하는 클래스입니다. 일반적인 상황에서 클래스 메서드를 사용하여 클래스를 인스턴스화하지 않으면 클래스 자체에는 메모리가 없습니다. 정적 템플릿이 여러 번 적용되는 경우입니다. 클래스가 각 인스턴스화 후에 일부 메모리를 기록하도록 하려면 많은 작업에 유용할 것입니다. 🎜异常内容: pision by zero 异常行数: 8异常文件: XXX/test.py🎜Print🎜
text = """<p> <h1>Title</h1> <p>A long text........ </p> <a href=""> a link </a> </p>"""🎜 Man 클래스를 두 번 인스턴스화하면 각 인스턴스의 ID가 다릅니다. 이는 클래스 메서드를 사용하여 달성됩니다. 먼저
@classmethod
를 사용하여 클래스 메서드를 설명하고 "cls"를 사용하여 이 클래스를 나타냅니다. 클래스 메소드에 의한 클래스 속성 처리가 기억됩니다. 🎜🎜클래스 메소드에서 처리하는 변수는 클래스 변수여야 한다는 점에 유의하세요. 클래스 메소드에서 인스턴스 변수를 처리하기 위해 self를 사용할 수 없기 때문에 위의 "id=0"과 같이 설명 앞에 클래스 변수를 배치해야 합니다. 클래스 변수는 자체적으로 접근이 가능하므로, 클래스 변수를 정의한 후에는 _init_ 함수에서 클래스 변수를 다시 기술할 필요가 없습니다. 따라서 위 코드에서는 self.id가 반드시 필요한 것은 아닙니다. 🎜🎜🎜4. str.format 및 탭 문자 t 중국어 정렬 설정 🎜🎜🎜str.format은 문자열 형식을 지정하며 {:<x}
구문은 왼쪽 정렬을 의미합니다. {: >x}
는 오른쪽 정렬, {:^x}
는 중앙 정렬), x 자리 미만은 자동 완성(기본값은 공백 완성)이지만 한자의 경우는 잘 지원되지 않으므로 여러 줄의 중국어 문자열이 있는 경우 정렬 오류가 발생할 수 있습니다. 계산하기 전에 문자열 길이를 고려하고 중국어 문자열을 인코딩해야 합니다. 🎜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)🎜자세한 내용은 https://blog.csdn.net/excaliburrr/article/details/76794451🎜🎜🎜5를 참조하세요. datetime 모듈에서 timedelta 클래스 사용🎜🎜
timedelta对象表示两个不同时间之间的差值, 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。
如果使用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)
所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储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 중국어 웹사이트의 기타 관련 기사를 참조하세요!