在Python程序中,函数filter()的功能是过滤序列,过滤掉不符合条件的元素,返回一个filter类。filter类实现了__iter__和__next__方法, 可以看成是一个迭代器, 有惰性运算的特性。使用函数filter()的语法格式如下所示。
filter(function, iterable)
在下面的实例文件filter.py中,演示了使用函数filter()过滤数据的过程。
# 过滤出列表中的所有奇数:def is_odd(n):return n % 2 == 1newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])①print(newlist)print(list(newlist))#过滤出1~100中平方根是整数的数import mathdef is_sqr(x):return math.sqrt(x) % 1 == 0newlist = filter(is_sqr, range(1, 101))②print(newlist)print(list(newlist))
执行后会输出:
<filter object at 0x000002021CFDF668>[1, 3, 5, 7, 9]<filter object at 0x000002021CFDF588>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
在Python 2版本中,①行代码执行后会输出列表“[1, 3, 5, 7, 9]”,②行代码执行后会输出列表“[[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]]”,这是因为Python 2版本返回的是过滤后的列表, 而Python 3版本中返回到是一个filter类。要想在Python 3程序中返回过滤后的列表,需要使用函数list()将其转化过来。
在Python程序中,函数float()的功能是将整数和字符串转换成浮点数。使用函数float()的语法格式如下所示。
class float([x])
参数“x”是一个整数或字符串,如果参数“x”是一个字符串,它应该包含一个十进制数,可选地前面有一个符号,并且可选地嵌入在空格中。可选的sign可以是'+'或'–'; '+'符号对生成的值没有影响。参数“x”还可以是表示NaN(非数字)或正或负无穷大的字符串。更确切地说,输入必须符合如下所示的语法,前导和尾随空白字符被删除:
sign ::= "+" | "-"infinity ::= "Infinity" | "inf"nan ::= "nan"numeric_value ::= floatnumber | infinity | nannumeric_string ::= [sign] numeric_value
在上述格式中,floatnumber是在浮点字面值中描述的Python浮点字面值的形式。例如“inf”、“Inf”、“INFINITY”和“iNfINity”都是正无穷大的可接受拼写。如果参数“x”是整数或浮点数,则返回具有相同值(在Python的浮点精度内)的浮点数。如果参数“x”在Python浮点数的范围之外,则引发一个OverflowError错误。对于一般的Python对象x,float(x)委托给x .__float__()。如果没有给出参数“x”,则返回0.0。
在下面的实例文件fl.py中,演示了使用函数float()将参数转换为浮点数的过程。
print(float(1))print(float(112))print(float(-123.6))print(float('123') ) # 字符串print( float())#不提供参数的时候,返回0.0
执行后会输出:
1.011.0-123.6123.00.0
在使用函数float()时,字符串必须能正确转换成浮点型数值的,否则报错。例如下面的演示过程。
>>> float('3.14.15926')Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>float('3.14.15926')ValueError: could not convert string to float: '3.14.15926'
在使用函数float()时,在字符串中允许出现“+”、“-”两个符号,两个符号和数字之间不能出现空格,但是符号前面和数字后面允许出现空格。例如下面的演示过程。
>>> float('+3.14') #带正号3.14>>> float('-3.14') #带负号-3.14>>> float(' -3.14 ') #正负号前、数字后可以有空格-3.14>>> float('- 3.14') #正负号与数字间不可以有空格Traceback (most recent call last):File "<pyshell#8>", line 1, in <module>float('- 3.14')ValueError: could not convert string to float: '- 3.14'
在使用函数float()时,有几个特殊的字符串能正确转换,例如"Infinity"或者“inf”(不区分大小写),能正确转换,表示无穷大,可以和“+”、“-”一起使用;“nan”也能正确转换,表示没有值。例如下面的实例文件fl1.py演示了函数float()的这一功能。
print(float('Infinity'))print(float('inf'))print(float('inFinIty')) #不区分大小写print(float('+inFinIty'))#正无穷print(float('-inFinIty')) #负无穷print(float('nan'))#没有值
执行后会输出:
infinfinfinf-infNan
在Python程序中,定义的对象如果要被float()函数正确转换成浮点数,则需要定义__float__函数。例如执行下面的代码将会报错:
>>> class X:def __init__(self,score):self.score = score>>> x = X(9.7)>>> float(x) #不能转换Traceback (most recent call last):File "<pyshell#20>", line 1, in <module>float(x)TypeError: float() argument must be a string or a number, not 'X'
而执行下面的实例文件fl2.py就会成功。
class X: #重新定义类,加入__float__方法def __init__(self,score):self.score = scoredef __float__(self):return self.scorex = X(9.7)print(float(x))#可以转换
执行后会输出:
9.7
在Python程序中,函数format()是一种格式化字符串的函数,它增强了字符串格式化的功能。使用函数format()的语法格式如下所示。
format(value[, format_spec])
函数format()的功能是将value转化成“格式化”的表现形式,格式由format_spec控制。对format_spec的解释依赖于参数value的类型,大多数内置类型有标准的格式化语法。format_spec是一个格式化参数,默认是一个空字符串,通常给出与调用str(value)相同的效果。对参数format_spec的调用将被转换为type(value).__ format __(value, t4> format_spec)其在搜索值的__format__()方法时绕过实例字典。如果方法搜索到达object并且format_spec不为空,或者如果format_spec,则会引发TypeError t7>或返回值不是字符串。
如果没有提供参数format_spec,则和调用str(value)效果相同,转换成字符串格式化。
在使用函数format()时,可以接受不限个数的参数,位置可以不按顺序排列。例如下面的实例文件for.py演示了函数format()的这一功能。
print("{} {}".format("hello", "world")) # 不设置指定位置,按默认顺序print("{0} {1}".format("hello", "world")) # 设置指定位置print("{1} {0} {1}".format("hello", "world")) # 设置指定位置
执行后会输出:
hello worldhello worldworld hello world
在使用函数format()时,也可以设置指定的参数,例如下面的实例文件for1.py演示了函数format()的这一功能。
print("网站名:{name}, 地址 {url}".format(name="Python教程", url=ppr"))# 通过字典设置参数site = {"name": "Python教程", "url": ppr"}print("网站名:{name}, 地址 {url}".format(**site))# 通过列表索引设置参数my_list = ['Python教程', ppr']print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
执行后会输出:
网站名:Python教程, 地址 ppr网站名:Python教程, 地址 ppr网站名:Python教程, 地址 ppr
在使用函数format()时,也可以向函数str.format()传入对象,例如下面的实例文件for2.py演示了函数format()的这一功能。
class AssignValue(object):def __init__(self, value):self.value = valuemy_value = AssignValue(6)print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
执行后会输出:
value 为: 6
在Python程序中,函数format()实现数字格式化功能的说明如表1-1所示。
表1-1 实现数字格式化功能的说明
数字 | 格式 | 输出 | 描述 |
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) | 1011 11 13 b 0xb 0XB | 进制 |
其中^、<、> 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格。b、d、o、x 分别是二进制、十进制、八进制、十六进制。此外还可以使用大括号{}来转义大括号,例如下面的演示代码:
print ("{} 对应的位置是 {{0}}".format("runoob"))
执行后会输出:
runoob 对应的位置是 {0}
在Python程序中,函数frozenset()的功能是返回一个冻结的集合,冻结后的集合不能再添加或删除任何元素。使用函数frozenset()的语法格式如下所示。
class frozenset([iterable])
函数frozenset()能够返回一个新的frozenset对象,参数iterable 是一个可迭代的对象,例如列表、字典、元组等等。如果可选参数iterable存在,则frozenset的元素来自于iterable。
例如在下面的实例文件fro.py中,演示了使用函数frozenset()处理结合元素的过程。
#传入一个可迭代对象,生成一个新的不可变集合a = frozenset(range(10))print(a)frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})b = frozenset('I am a Pythoner')print(b)#不传入参数时,生成的空的不可变集合。c = frozenset()print(c)
执行后会输出:
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})frozenset({'P', 'h', ' ', 'I', 'y', 't', 'e', 'm', 'n', 'a', 'r', 'o'})frozenset()
在Python程序中,函数getattr()的功能是返回一个对象属性值。使用函数getattr()的语法格式如下所示。
getattr(object, name[, default])
例如在下面的实例文件get.py中,演示了使用函数getattr()获取对象属性的过程。
# 定义类Studentclass Student:def __init__(self, name):self.name = names = Student('Aim')print(getattr(s, 'name')) # 等效于调用s.nameprint(s.name)
执行后会输出:
AimAim
在函数getattr()中,第三个参数default为可选参数,如果在对象object中包含属性name,则返回属性name的值。如果没有属性name,则返回default值。如果default未传入值,则报错。例如下面的实例文件get1.py演示了函数getattr()的这一用法。
#定义类Studentclass Student:def __init__(self,name):self.name = names = Student('Aim')print(getattr(s,'name'))#存在属性nameprint(getattr(s,'age',6))#不存在属性age,但提供了默认值,返回默认值6print(getattr(s,'age') )#不存在属性age,未提供默认值,调用报错
执行后会输出:
AimTraceback (most recent call last):6File "get1.py", line 9, in <module>print(getattr(s,'age') )#不存在属性age,未提供默认值,调用报错AttributeError: 'Student' object has no attribute 'age'
本文发布于:2024-01-31 20:20:22,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170670362431100.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |