
Python学习笔记(十三)format()数字格式化 和 内置函数(25-52)
format()数字格式化
下表展示了 str.format() 格式化数字的多种方法:
>>> print("{:.2f}".format(3.1415926))
3.14
数字
格式
输出
描述
3.1415926
{:.2f}
3.14
保留小数点后两位
3.1415926
{:+.2f}
+3.14
带符号保留小数点后两位
-1
{:+.2f}
-1.00
带符号保留小数点后两位
2.71828
{:.0f}
3
不带小数,四舍五入
5
{:0>4d}
05
数字补0 (填充左边, 宽度为4)
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 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号,如下实例:
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print ("{} 对应的位置是 {{0}}".format("runoob"))
输出结果为:
runoob 对应的位置是 {0}
# 25、frozenset():
'''
描述:
返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
语法:
frozenset([iterable])
参数:
iterable--可迭代的对象,比如列表、字典、元组等等。
返回值:
返回新的frozenset对象,如果不提供任何参数,默认会生成空集合
'''
print(frozenset())
# frozenset()
a = frozenset(range(10)) # 生成一个新的不可变集合
print(a)
# frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
b = frozenset('runoob') # 创建不可变集合
print(b)
# frozenset({'r', 'o', 'u', 'n', 'b'})
'''
为什么需要冻结的集合(即不可变的集合)呢?
因为在集合的关系中,有的集合中的元素是另一个集合的情况,但是普通集合(set)本身是可变的,
那么它的实例就不能存放在另一个集合中(set中的元素必须是不可变类型)。
所以,frozenset提供了不可变的集合的功能,当集合不可变时,
它就满足了作为集合中的元素的要求,就可以放在另一个集合中了。
'''
# 26、getattr():
'''
描述:
用于返回一个对象属性值
语法:
getattr(object, name[, default])
参数:
object--对象
name--字符串,对象属性
default--默认返回值,如果不提供该参数,在没有对应属性时,将触发AttributeError
返回值:
返回对象属性值
'''
class A(object):
bar = 11
a = A()
print(getattr(a, 'bar')) # 获取类属性bar的值
# print(getattr(a, 'bar2')) # 属性bar2不存在,触发异常AttributeError: 'A' object has no attribute 'bar2'
print(getattr(a, 'bar2', -1)) # 属性bar2不存在,但设置了默认值-1,返回值为-1
class A():
def set(self, a, b):
x = a
a = b
b = x
print(a, b)
a = A()
c = getattr(a, 'set')
c(a='1', b='2') # 打印结果:2 1
##### 看不懂 #####
# 27、globals():
'''
描述:
以字典类型返回当前位置的全部全局变量。对比locals()函数
语法:
globals()
参数:
无
返回值:
以字典类型返回当前位置的全部全局变量
'''
print(globals()) # globals函数返回一个全局变量的字典,包括所有导入的变量
# {'__name__': '__main__', '__doc__': '\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001D272980910>, '__spec__': None, '__annotations__': {}, '__builtins__':
# 28、hasattr():
'''
描述:
用于判断对象是否包含对应的属性
语法:
hasattr(object, name)
参数:
object--对象
name--字符串,属性名
返回值:
如果对象有该属性返回True,否则返回False
'''
class Coordinate:
x = 10
y = -5
z = 0
point1 = Coordinate()
print(hasattr(point1, 'x')) # True
print(hasattr(point1, 'y')) # True
print(hasattr(point1, 'z')) # True
print(hasattr(point1, 'no')) # False,没有该属性
# 29、hash():
'''
描述:
用于获取一个对象(字符串或数值等)的哈希值
语法:
hash(object)
参数:
object--对象
返回值:
返回对象的哈希值
'''
print(hash('test')) # 字符串,结果3138493826556676253
print(hash(123456789)) # 数字,结果123456789
print(hash(str([1, 2, 3]))) # 集合,结果3084751386921177152
print(hash(str(sorted({'a': 1})))) # 字典,结果-2240541016805128389
# 30、help():
'''
描述:
用于查看函数或模块用途的详细说明
语法:
help([object])
参数:
object--对象
返回值:
返回对象帮助信息
'''
help('sys') # 查看sys模块的帮助
# ......显示帮助信息......
help('str') # 查看str模块的帮助
# ......显示帮助信息......
a = [1, 2, 3] # 查看列表list帮助信息
help(a)
# ......显示帮助信息......
help(a.append) # 显示list的append方法的帮助
# ......显示帮助信息......
# 31、hex():
'''
描述:
用于将一个指定数字转换为16进制数
语法:
hex(x)
参数:
x--一个整数
返回值:
返回一个字符串,以0x开头
'''
print(hex(255)) # 0xff
print(hex(-42)) # -0x2a
print(hex(12)) # 0xc
print(type(hex(12))) #
# 32、id():
'''
描述:
id()函数返回对象的唯一标识符,标识符是一个整数。
CPython中id()函数用于获取对象的内存地址。
语法:
id([object])
参数:
object--对象
返回值:
返回对象的内存地址
'''
a = 'runoob'
print(id(a)) # 2604293190192
b = 1
print(id(b)) # 140719388104352
# 33、input():
'''
描述:
Python3.x中input()函数接收一个标准输入数据,返回string类型。
注意:在Python3.x中raw_input()和input()进行了整合,去除了raw_input(),仅保留了
input()函数,其接收任意性输入,将所有输入默认为字符串处理,并返回字符串类型。
语法:
input([prompt])
参数:
prompt--提示信息
返回值:
'''
### input()需要输入python表达式
a = input('input: ') # 输入整数:123
print(type(a)) # 字符串类型:
b = input('input: ') # 输入字符串表达式:runoob
print(type(b)) # 字符串类型:
### input()接收多个值
# 输入三角形的三边长
a, b, c = (input('请输入三角形三边的长:').split())
a = int(a)
b = int(b)
c = int(c)
# 计算三角形的半周长p
p = (a + b + c) / 2
# 计算三角形的面积s
s = (p * (p - a) * (p - b) * (p - c)) ** 0.5
# 输出三角形的面积
result_list = [a, b, c, p, s]
print('''三角形的三边长为:{:.2f},{:.2f},{:.2f}
三角形的半周长p为:{:.2f}
三角形的面积s为:{:.2f}'''.format(*result_list))
# 34、int():
'''
描述:
用于将一个字符串或数字转换为整型
语法:
int(x, base=10)
参数:
x--字符串或数字
base--进字数,默认为十进制
返回值:
返回整型数据
'''
print(int()) # 不传入参数时,得到结果0
print(int(3)) # 3
print(int(3.6)) # 3
print(int('12', 16)) # 18,如果是带参数base的话,12要以字符串形式输入,12为16进制
print(int('0xa', 16)) # 10
print(int('10', 8)) # 8
print(int('1001', 2)) # 1001才是2进制格式,转换为十进制数字9
print(int('123', 8)) # 视123为8进制数,对应的10进制为83
# 35、isinstance():
'''
描述:
判断一个对象是否是一个已知的类型,类似type()。
instance()和type()的却别:
instance()会认为子类是一种父类类型,考虑继承关系。
type()不会认为子类是一种父类类型,不考虑继承关系。
如果要判断两个类型是否相同,推荐使用isinstance()。
语法:
isinstance(object, classinfo)
参数:
object--实例对象
classinfo--可以是直接或间接类名、基本类型或者由它们组成的元组。
对于基本类型来说,classinfo可以是--int, float, bool, complex, str(字符串), list, dict(字典), set, tuple
要注意的是,classinfo的字符串是str而不是string,字典也是简写dict
返回值:
如果对象的类型与参数二的类型(classinfo)相同则返回True,否则返回False。
'''
a = 2
print(isinstance(a, int)) # True
print(isinstance(a, str)) # False
print(isinstance(a, (str, int, list))) # 是元组中的一个,返回True
print('---------------')
# type()与isinstance()区别:
class A:
pass
class B(A):
pass
print(isinstance(A(), A)) # True
print(type(A()) == A) # True
print(isinstance(B(), A)) # True,考虑继承关系
print(type(B()) == A) # False,不考虑继承关系
# 36、issubclass():
'''
描述:
用于判断参数class是否是类型参数classinfo的子类
语法:
issubclass(class, classinfo)
参数:
class--类
classinfo--类
返回值:
如果class是classinfo的子类则返回True,否则返回False
'''
class A:
pass
class B(A):
pass
print(issubclass(B, A)) # True
# 37、iter():
'''
描述:
用来生成迭代器
语法:
iter(object[, sentinel]) sentinel标记,哨兵,守卫,放哨
参数:
object--支持迭代的集合对象
sentinel--如果传递了第二个参数,则参数object必须是一个可调用的对象(如函数),此时,
iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object。
返回值:
迭代器对象
'''
lst = [1, 2, 3]
for i in iter(lst):
print(i)
# 38、len():
'''
描述:
返回对象(字符、列表、元组等)长度或项目个数
len()是内置函数,返回对象的长度(元素个数)。
实参可以是序列(如string、bytes、tuple、list或range等)
也可以是集合(如dictionary、set或frozenset等)。
len()不是字符串类的方法。
语法:
len(s)
参数:
s--对象
返回值:
返回对象长度
'''
str = 'runoob'
print(len(str)) # 字符串长度 6
lst = [1, 2, 3, 4, 5]
print(len(lst)) # 列表元素个数 5
# 39、list():
'''
描述:
用于将元组或字符串转换为列表。
注意:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是(),列表是[]
语法:
list(seq)
参数:
seq--要转换为列表的元组或字符串
返回值:
返回列表
'''
tuple1 = (123, 'Google', 'Runoob', 'Taobao')
print('元组元素:', tuple1)
# 元组元素: (123, 'Google', 'Runoob', 'Taobao')
list1 = list(tuple1)
print('列表元素:', list1)
# 列表元素: [123, 'Google', 'Runoob', 'Taobao']
str = 'hello world'
print('字符串:', str)
# 字符串: hello world
list2 = list(str)
print('列表元素:', list2)
# 列表元素: ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
# 40、locals():
'''
描述:
locals()函数会以字典类型返回当前位置的全部局部变量。对比globals()函数
对于函数,方法,lambda表达式,类,以及实现了__call__方法的类实例,它都返回True。
语法:
locals()
参数:
无
返回值:
返回字典类型的局部变量
'''
print(locals())
# {'__name__': '__main__', '__doc__': '\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001E9BAAAF910>, '__spec__': None, '__annotations__': {}, '__builtins__':
print(globals())
# {'__name__': '__main__', '__doc__': '\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001E9BAAAF910>, '__spec__': None, '__annotations__': {}, '__builtins__':
def runoob(arg): # 两个局部变量:arg、z
z = 1
print(locals())
# {'arg': 4, 'z': 1}
print(globals())
# {'__name__': '__main__', '__doc__': '\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002758D87F910>, '__spec__': None, '__annotations__': {}, '__builtins__':
runoob(4)
# 41、map():
'''
描述:
map()函数会根据提供的函数对指定序列做映射。
第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次
function函数返回值的新列表
语法:
map(function, iterable, ...)
参数:
function--函数
iterable--一个或多个序列
返回值:
返回一个迭代器
'''
def square(x): # 计算平方数
return x ** 2
print(map(square, [1, 2, 3, 4, 5])) # 计算列表中各个元素的平方
#
print(list(map(square, [1, 2, 3, 4, 5]))) # 使用list()转换为列表
# [1, 4, 9, 16, 25]
print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))) # 使用lambda匿名函数
# [1, 4, 9, 16, 25]
# 42、max():
'''
描述:
返回给定参数的最大值,参数可以为序列
语法:
max(x, y, z, ...)
参数:
x--数值表达式
y--数值表达式
z--数值表达式
返回值:
返回给定参数的最大值
'''
print('max(80, 100, 1000):',max(80, 100, 1000))
print('max(-20, 100, 400):',max(-20, 100, 400))
print('max(-80, -20, -10):',max(-80, -20, -10))
print('max(0, -100, -400):',max(0, -100, -400))
# 43、min():
'''
描述:
返回给定参数的最小值,参数可以为序列
语法:
min(x, y, z, ...)
参数:
x--数值表达式
y--数值表达式
z--数值表达式
返回值:
返回给定参数的最小值
'''
print('max(80, 100, 1000):',max(80, 100, 1000))
print('max(-20, 100, 400):',max(-20, 100, 400))
print('max(-80, -20, -10):',max(-80, -20, -10))
print('max(0, -100, -400):',max(0, -100, -400))
# 44、memoryview():
'''
描述:
返回给定参数的内存查看对象(memory view)。
所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,
在不需要复制对象的基础上允许Python代码访问。
语法:
memoryview(obj)
参数:
obj--对象
返回值:
返回元组列表
'''
### Python2.x应用:
v = memoryview('abcdef')
print(v[1]) # b
print(v[-1]) # f
print(v[1:4]) #
print(v[1:4].tobytes()) # bcd
print(v[1:4].tolist()) # [98, 99, 100]
### Python3.x应用:
v = memoryview(bytearray('abcdef', 'utf-8'))
print(v[1]) # 98
print(v[-1]) # 102
print(v[1:4]) #
print(v[1:4].tobytes()) # b'bcd'
print(v[1:4].tolist()) # [98, 99, 100]
# 45、next():
'''
描述:
next()返回迭代器的下一个项目
next()函数要和生成迭代器的iter()函数一起使用。
语法:
next(iterable[, default])
参数:
iterable--可迭代对象
default--可选,用于设置在没有下一个元素时的默认返回值,
如果不设置且又没有下一个元素,则会触发StopIteration异常。
返回值:
返回迭代器的下一个项目
'''
# 首先获得Iterator对象:
ite = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(ite)
print(x)
except StopIteration:
# 遇到StopIteration就退出循环
print('没有可返回的元素!')
break
'''打印结果
1
2
3
4
5
没有可返回的元素!'''
# y = next(ite) # 报出异常:StopIteration
# 46、object():
'''
描述:
创建一个空对象
不能向这个对象添加新的属性或方法。
这个对象是所有类的基础,它拥有所有类默认的内置属性和方法。
语法:
object()
参数:
无参数
返回值:
返回一个空对象
'''
# help(object()) # 查看object()函数的帮助
x = object()
print(x)
#