Python标准内置函数(51-55)

1.51  函数range()

在Python程序中,使用函数range()的语法格式如下所示。

range(stop)

range(start, stop[, step])
  1. start:计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  2. end:计数到 end 结束,但不包括 end。例如range(0, 5) 是[0, 1, 2, 3, 4]没有5;
  3. step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)。

函数range()的功能是创建一个整数列表,一般被用在 for 循环中。例如在下面的实例文件range.py中,演示了使用函数range()定义一个可控属性值 x的过程。

#可以直接传入一个结束整数来初始化一个range类型,默认起始值为0(包含0).

# 结束整数可以大于0,也可以小于等于0,但是小于等于0的时候生成的range对象实际是不包含任何元素的。

a = range(5)

print(a)

range(0, 5)

print(len(a))

for x in a:print(x)



#可以传入一个起始整数和一个结束整数来初始化一个range类型,

# 生成的range类型包含起始整数(包含),和结束整数(不包含)之间的所有整数。

a = range(1,5)

print(a)

range(1, 5)

for x in a:print(x)



#传入了起始整数和结束整数,还可以同时传入一个步进值来初始化一个range类型,

# 生成的range类型包含起始整数(包含),和结束整数(不包含)之间的以步进值筛选后的整数。

a = range(1,10,3)

print(a)

range(1, 10, 3)

for x in a:print(x)



#初始化range类型时起始整数和结束整数,遵循的是左臂右开原则,即包含起始整数,但不包含结束整数。

a = range(1,5)

print(a)

range(1, 5)

for x in a:print(x) # 包含1,不包含5

执行后会输出:

range(0, 5)

5

0

1

2

3

4

range(1, 5)

1

2

3

4

range(1, 10, 3)

1

4

7

range(1, 5)

1

2

3

4

函数range()接收的参数都必须是整数,不能是浮点数等其它数据类型,否则运行后会出错。例如下面的演示过程。

>>> a = range(3.5)

Traceback (most recent call last):

  File "<pyshell#33>", line 1, in <module>

    a = range(3.5)

TypeError: 'float' object cannot be interpreted as an integer

>>> a = range('3.5')

Traceback (most recent call last):

  File "<pyshell#34>", line 1, in <module>

    a = range('3.5')

TypeError: 'str' object cannot be interpreted as an integer

函数range()实际上是一个不可变的序列类型,可以对它进行取元素、切片等序列操作,但是不能对其中元素修改值。例如下面的演示过程。

>>> a = range(1,5)

>>> a[0] # 取元素

1

>>> a[:-2] # 切片

range(1, 3)

>>> a[1] = 2 # 修改元素值

Traceback (most recent call last):

  File "<pyshell#38>", line 1, in <module>

    a[1] = 2

TypeError: 'range' object does not support item assignment

1.52  函数repr()

在Python程序中,使用函数repr()的语法格式如下所示。

repr(object)

函数repr()的功能是返回参数对象object可打印形式的字符串,其功能和str()函数比较类似,但是两者也有差异:函数str()用于将值转化为适于人阅读的形式,而函数repr()转化为供解释器读取的形式。

例如在下面的实例文件repr.py中,演示了使用函数repr()将对象转化为可打印形式的字符串的过程。

a = 'some text'

print(str(a))

print(repr(a))



# repr函数的结果一般能通过eval()求值的方法获取到原对象。

print(eval(repr(a)))



#对于一般的类型,对其实例调用repr函数返回的是其所属的类型和被定义的模块,以及内存地址组成的字符串。

class Student:

    def __init__(self,name):

        self.name = name



a = Student('Bob')

print(repr(a))



#如果要改变类型的repr函数显示信息,需要在类型中定义__repr__函数进行控制。

class Student:

    def __init__(self,name):

        self.name = name

    def __repr__(self):

        return ('a student named ' + self.name)



b = Student('Kim')

print(repr(b))

执行后会输出:

some text

'some text'

some text

<__main__.Student object at 0x000001869D89F438>

a student named Kim

1.53  函数reversed()

在Python程序中,使用函数reversed()的语法格式如下所示。

reversed(seq)

参数“seq”表示要转换的序列,可以是 tuple、string、list或range类型。函数reversed()的功能是返回一个反转的iterator迭代器。seq必须是一个具有__reversed__() 方法或支持序列协议的对象(整数参数从0开始的__len__()方法和__getitem__() 方法)。

例如在下面的实例文件reversed.py中,演示了使用函数reversed()返回一个反转的迭代器的过程。

# 字符串

seqString = 'Toppr'

print(list(reversed(seqString)))



# 元组

seqTuple = ('T', 'o', 'p', 'p', 'r')

print(list(reversed(seqTuple)))



# range

seqRange = range(5, 7)

print(list(reversed(seqRange)))



# 列表

seqList = [1, 2, 4, 3, 5]

print(list(reversed(seqList)))



#功能是反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器。

a = reversed(range(10)) # 传入range对象

print(a)# 类型变成迭代器

print(list(a))

a = ['a','b','c','d']

print(a)

print(reversed(a))# 传入列表对象

b = reversed(a)

print(b)# 类型变成迭代器

print(list(b))

执行后会输出:

['r', 'p', 'p', 'o', 'T']

['r', 'p', 'p', 'o', 'T']

[6, 5]

[5, 3, 4, 2, 1]

<range_iterator object at 0x0000022A18CCDF30>

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

['a', 'b', 'c', 'd']

<list_reverseiterator object at 0x0000022A17ADFB00>

<list_reverseiterator object at 0x0000022A17ADFB00>

['d', 'c', 'b', 'a']

如果函数reversed()的参数不是一个序列对象,则必须定义一个__reversed__方法。例如下面的演示过程。

# 类型Student没有定义__reversed__方法

>>> class Student:

    def __init__(self,name,*args):

        self.name = name

        self.scores = []

        for value in args:

            self.scores.append(value)



           

>>> a = Student('Bob',78,85,93,96)

>>> reversed(a) # 实例不能反转

Traceback (most recent call last):

  File "<pyshell#37>", line 1, in <module>

    reversed(a)

TypeError: argument to reversed() must be a sequence

>>> type(a.scores) # 列表类型

<class 'list'>





# 重新定义类型,并为其定义__reversed__方法

>>> class Student:

    def __init__(self,name,*args):

        self.name = name

        self.scores = []

        for value in args:

            self.scores.append(value)

    def __reversed__(self):

        self.scores = reversed(self.scores)



       

>>> a = Student('Bob',78,85,93,96)

>>> a.scores # 列表类型

[78, 85, 93, 96]

>>> type(a.scores)

<class 'list'>



>>> reversed(a)  # 实例变得可以反转

>>> a.scores # 反转后类型变成迭代器

<list_reverseiterator object at 0x0342F3B0>

>>> type(a.scores)

<class 'list_reverseiterator'>



>>> list(a.scores)

[96, 93, 85, 78]

1.54  函数round()

在Python程序中,使用函数round()的语法格式如下所示。

round(number[, ndigits])

函数round()的功能是返回浮点数x的四舍五入值,也就是返回参数number舍入到小数点后ndigits位的浮点值。如果省略参数ndigits,将返回最接近输入的整数。底层调用的是number.__round__(ndigits)。对于支持round()的内建类型来说,值舍入到10的最接近的负ndigits次幂的倍数;如果离两个倍数的距离相等,则舍入选择偶数(因此,round(0.5)和round(-0.5)都是0,而round(1.5)是2)。如果使用一个参数调用,返回值是一个整数,否则类型与number相同。

例如在下面的实例文件round.py中,演示了使用函数round()返回浮点数四舍五入值过程。

print ("round(70.23456) : ", round(70.23456))

print ("round(56.659,1) : ", round(56.659,1))

print ("round(80.264, 2) : ", round(80.264, 2))

print ("round(100.000056, 3) : ", round(100.000056, 3))

print ("round(-100.000056, 3) : ", round(-100.000056, 3))



#具体保留几位小数,以传入的ndigits参数来控制。

print(round(1.1314926,1))

print(round(1.1314926,5))



#ndigits参数为可选参数,当不传入时,即以默认保留0位小数进行取整,返回的是整数。

print(round(1.1314926))



#ndigits参数传入0时,虽然与不传入ndigits参数一样保留0位小数进行四舍五入,但是返回的值是浮点型。

print(round(1.1314926,0))



#ndigits参数小于0时,对整数部分进行四舍五入,ndigits参数控制了对浮点数的整数部分的后几位进行四舍五入,

# 小数部分全部清0,返回类型是浮点数。如果传入的浮点数的整数部分位数小于ndigits参数绝对值,则返回0.0.

print(round(11314.926,-1))

print(round(11314.926,-3))

print(round(11314.926,-4))

print(round(11314.926,-5))



#round四舍五入时是遵循靠近0原则,所以-0.5和0.5进行0位四舍五入,返回的都是0.

print(round(0.5))

print(round(-0.5))



#对于浮点数求四舍五入有一个陷阱,有些四舍五入结果不像预期那样,

# 比如round(1.675, 2) 的结果是1.67 而不是预期的 1.68,这不是bug,

# 而是浮点数在存储的时候因为位数有限,实际存储的值和显示的值有一定误差。

print(round(1.675, 2))



#对整数也能进行round操作,返回值也是整形。

print(round(134567))

print(round(134567,0))

print(round(134567,1))

print(round(134567,2))

print(round(134567,-2))

print(round(134567,-6))

执行后会输出:

round(70.23456) :  70

round(56.659,1) :  56.7

round(80.264, 2) :  80.26

round(100.000056, 3) :  100.0

round(-100.000056, 3) :  -100.0

1.1

1.13149

1

1.0

11310.0

11000.0

10000.0

0.0

0

0

1.67

134567

134567

134567

134567

134600

0

1.55  函数set()

在Python程序中,使用函数set()的语法格式如下所示。

class set([iterable])

函数set()的功能是创建一个无序不重复元素集,可以进行关系测试,删除重复数据,还可以计算交集、差集和并集等。执行函数set()后会返回一个新的set 对象,其元素可以从可选的参数iterable中获得。

例如在下面的实例文件set.py中,演示了使用函数set()返回一个反转的迭代器的过程。

x = set('toppr')

y = set('google')

print(x, y)

print(x & y)        # 交集

set(['o'])

print(x | y)        # 并集

print(x - y)        # 差集



#传入一个可迭代对象,生成一个新的集合。

a = set(range(10))

print(a)

#不传入参数时,生成一个新的空集合。

a = set()

print(a)

#返回的集合是可以修改的。

a = set()

print(a)

a.add(1)

print(a)

执行后会输出:

{'r', 't', 'o', 'p'} {'o', 'e', 'g', 'l'}

{'o'}

{'r', 'l', 'g', 'e', 'o', 't', 'p'}

{'r', 't', 'p'}

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

set()

set()

{1}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值