Python标准内置函数(41-45)

1.41  函数max()

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

max(iterable, *[, key, default])

max(arg1, arg2, *args[, key])

参数arg1、arg2和args可以都是数值表达式,函数max()的功能是返回给定参数的最大值。因为参数可以为序列,所以函数max()的也能返回传入的多个参数中的最大值,或者传入的可迭代对象元素中的最大值。默认数值型参数取值大者,字符型参数取字母表排序靠后者。还可以传入命名参数key,其为一个函数,用来指定取最大值的方法。命名参数default用来指定最大值不存在时返回的默认值。函数max()至少传入两个参数,但是有只传入一个参数的例外,此时参数必须为可迭代对象,返回的是可迭代对象中的最大元素。

在下面的实例文件max.py中,演示了使用函数max()获取最大值的过程。

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))



print(max(1,2))# 传入2个参数 取2个中较大者

print(max(1,2,3))# 传入3个参数 取3个中较大者

print(max('1234'))# 传入1个参数不会报错,因为传入了1个可迭代对象,取其最大元素值

#print(max(1)) # 传入1个参数报错

执行后会输出:

max(80, 100, 1000) :  1000

max(-20, 100, 400) :  400

max(-80, -20, -10) :  -10

max(0, 100, -400) :  100

2

3

4

当传入函数max()参数的数据类型不一致时,传入的所有参数将进行隐式数据类型转换后再比较,如果不能进行隐式数据类型转换则会报错。例如下面的演示过程。

>>> max(1,1.1,1.3E1) # 整数与浮点数可取最大值

13.0

>>> max(1,2,3,'3') # 数值与字符串不能取最大值

Traceback (most recent call last):

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

    max(1,2,3,'3')

TypeError: unorderable types: str() > int()



>>> max([1,2],[1,3]) # 列表与列表可取最大值

[1, 3]

>>> max([1,2],(1,3)) # 列表与元组不能取最大值

Traceback (most recent call last):

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

    max([1,2],(1,3))

TypeError: unorderable types: tuple() > list()

当存在多个相同的最大值时,函数max()返回的是最先出现的那个最大值。例如下面的演示过程。

#定义a、b、c 3个列表

>>> a = [1,2]

>>> b = [1,1]

>>> c = [1,2]



#查看a、b、c 的id

>>> id(a)

68128320

>>> id(b)

68128680

>>> id(c)

68128240



#取最大值

>>> d = max(a,b,c)

>>> id(d)

68128320



#验证是否最大值是否是a

>>> id(a) == id(d)

True

如果函数max()是默认数值型参数则取值大者,如果是字符型参数则取字母表排序靠后者,函数max()序列型参数则依次按索引位置的值进行比较取最大者。另外,还可以通过传入命名参数key来指定取最大值方法。例如下面的演示过程。

>>> max(1,2) # 取数值大者

2

>>> max('a','b') # 取排序靠后者

'b'

>>> max('ab','ac','ad') # 依次按索引比较取较大者

'ad'



>>> max(-1,0) # 数值默认去数值较大者

0

>>> max(-1,0,key = abs) # 传入了求绝对值函数,则参数都会进行求绝对值后再取较大者

-1

在函数max()中,参数key的另外一个作用是不同类型对象本来不能比较取最大值的,传入合适的key参数后,函数max()会变得更好的能取最大值。例如下面的演示过程。

>>> max(1,2,'3') #数值和字符串不能取最大值

Traceback (most recent call last):

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

    max(1,2,'3')

TypeError: unorderable types: str() > int()

>>> max(1,2,'3',key = int) # 指定key为转换函数后,可以取最大值

'3'



>>> max((1,2),[1,1]) #元组和列表不能取最大值

Traceback (most recent call last):

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

    max((1,2),[1,1])

TypeError: unorderable types: list() > tuple()

>>> max((1,2),[1,1],key = lambda x : x[1]) #指定key为返回序列索引1位置的元素后,可以取最大值

(1, 2)

当函数max()只传入的一个可迭代对象时,而且可迭代对象为空,则必须指定命名参数default,用来指定最大值不存在时函数返回的默认值。例如下面的演示过程。

>>> max(()) #空可迭代对象不能取最大值

Traceback (most recent call last):

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

    max(())

ValueError: max() arg is an empty sequence

>>> max((),default=0) #空可迭代对象,指定default参数为默认值

0

>>> max((),0) #默认值必须使用命名参数进行传参,否则将被认为是一个比较的元素

Traceback (most recent call last):

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

    max((),0)

TypeError: unorderable types: int() > tuple()

1.42  函数memoryview()

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

memoryview(obj)

参数“obj”是一个对象,函数memoryview()的功能是返回给定参数的内存查看对象(Momory view)。所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问。在Python内置对象中,支持缓冲区协议的对象有bytes和bytearray。

在下面的实例文件mem.py中,演示了使用函数memoryview()获取内存对象的过程。

v = memoryview(bytearray("abcefg", 'utf-8'))

print(v[1])

print(v[-1])

print(v[1:4])

print(v[1:4].tobytes())

执行后会输出:

98

103

<memory at 0x00000206E0778348>

b'bce'

1.43  函数min()

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

min(iterable, *[, key, default])

min(arg1, arg2, *args[, key])

函数min()的功能是返回可迭代的对象中的最小的元素,或者返回2个或多个参数中的最小的参数。函数min()的参数默认为数值型,取值小者;如果是字符型参数,则取字母表排序靠前者。还可以传入命名参数key,其为一个函数,用来指定取最小值的方法。命名参数default用来指定最小值不存在时返回的默认值。功能与max函数相反。

函数min()至少传入两个参数,但是有只传入一个参数的例外,此时参数必须为可迭代对象,返回的是可迭代对象中的最小元素。例如下面的演示过程。

>>> min(1) # 传入1个参数报错

Traceback (most recent call last):

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

    min(1)

TypeError: 'int' object is not iterable

>>> min(1,2) # 传入2个参数 取2个中较小者

1

>>> min(1,2,3) # 传入3个参数 取3个中较小者

1

>>> min('1234') # 传入1个可迭代对象,取其最小元素值

'1'

当函数min()传入参数为数据类型不一致时,传入的所有参数将进行隐式数据类型转换后再比较,如果不能进行隐式数据类型转换时会报错。例如下面的演示过程。

>>> min(1,1.1,1.3e1) # 整数与浮点数可取最小值

1

>>> min(1,2,'3') # 数值与字符串不能取最小值

Traceback (most recent call last):

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

    min(1,2,'3')

TypeError: unorderable types: str() < int()



>>> min([1,2],[1,3]) # 列表与列表可取最小值

[1, 2]

>>> min((1,2),[1,3]) # 列表与元组不能取最小值

Traceback (most recent call last):

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

    min((1,2),[1,3])

TypeError: unorderable types: list() < tuple()

当函数min()有多个相同的最小值时,返回的是最先出现的那个最小值。例如下面的演示过程。

#定义a、b、c 3个列表

>>> a = [1,2]

>>> b = [1,3]

>>> c = [1,2]



#查看a、b、c 的id

>>> id(a)

66486184

>>> id(b)

66486224

>>> id(c)

66486024



#取最小值

>>> d = min(a,b,c)

>>> id(d)

66486184





#验证是否最小值是否是a

>>> id(a) == id(d)

True

函数min()的默认参数类型为数值型,此时取值小者;如果是字符型参数,取字母表排序靠前者;如果是序列型参数,则依次按索引位置的值进行比较取最小者。还可以通过传入命名参数key,指定取最小值方法。例如下面的演示过程。

>>> min(1,2) # 取数值小者

1

>>> min('a','b') # 取排序靠前者

'a'

>>> min('ab','ac','ad') # 依次按索引比较取较小者

'ab'



>>> min(-1,-2) # 数值默认去数值较小者

-2

>>> min(-1,-2,key = abs)  # 传入了求绝对值函数,则参数都会进行求绝对值后再取较小者

-1

在函数min()中,参数key的另外一个作用是,不同类型对象本来不能比较取最小值的,传入适当的key函数,变得可以比较能取最小值了。例如下面的演示过程。

>>> min(1,2,'3') #数值和字符串不能取最小值

Traceback (most recent call last):

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

    min(1,2,'3')

TypeError: unorderable types: str() < int()

>>> min(1,2,'3',key = int) # 指定key为转换函数后,可以取最小值

1



>>> min([1,2],(1,1)) #元组和列表不能取最小值

Traceback (most recent call last):

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

    min([1,2],(1,1))

TypeError: unorderable types: tuple() < list()

>>> min([1,2],(1,1),key = lambda x:x[1]) #指定key为返回序列索引1位置的元素后,可以取最小值

(1, 1)

当函数min()只传入的一个可迭代对象时,而且可迭代对象为空,则必须指定命名参数default,用来指定最小值不存在时,函数返回的默认值。例如下面的演示过程。

>>> min(()) #空可迭代对象不能取最小值

Traceback (most recent call last):

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

    min(())

ValueError: min() arg is an empty sequence



>>> min((),default = 0) #空可迭代对象,指定default参数为默认值

0



>>> min((),0) #默认值必须使用命名参数进行传参,否则将被认为是一个比较的元素

Traceback (most recent call last):

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

    min((),0)

TypeError: unorderable types: int() < tuple()

1.44  函数next()

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

next(iterator[, default])
  1. iterator:可迭代对象;
  2. default:可选参数,用于设置在没有下一个元素时返回该默认值。如果不设置这个参数,又没有下一个元素则会触发 StopIteration异常。

函数next()的功能是返回迭代器的下一个项目,通过调用__next__()方法从迭代器中检索下一个项目。如果有参数default,在迭代器迭代完所有元素之后返回该参数;否则会抛出StopIteration。

在下面的实例文件next.py中,演示了使用函数next()迭代元素对象的过程。

a = iter('abcd')

print(next(a,'e'))

print(next(a,'e'))

print(next(a,'e'))

print(next(a,'e'))

print(next(a,'e'))

print(next(a,'e'))



# 首先获得Iterator对象:

it = iter([1, 2, 3, 4, 5])

# 循环:

while True:

    try:

        # 获得下一个值:

        x = next(it)

        print(x)

    except StopIteration:

        # 遇到StopIteration就退出循环

        break

执行后会输出:

a

b

c

d

e

e

1

2

3

4

5

1.45  函数oct(x)

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

oct(x)

参数x是一个整数,函数oct(x)的功能是将一个整数转换成8进制字符串。如果x不是Python int对象,则必须定义一个返回整数的__index__()方法。

在下面的实例文件oct.py中,演示了使用函数oct(x)进行数据转换的过程。

a = oct(10)

print(a)

print(type(a))# 返回结果类型是字符串

#print(oct(10.0)) # 浮点数不能转换成8进制

#print(oct('10')) # 字符串不能转换成8进制

执行后会输出:

0o12

<class 'str'>

如果函数oct(x)传入的参数不是整数,则其必须是一个定义了__index__并返回整数函数的类的实例对象。例如下面的实例文件oct1.py说明了这一点。

# 未定义__index__函数,不能转换

class Student:

    def __init__(self, name, age):

        self.name = name

        self.age = age



a = Student('Kim', 10)

#print(oct(a))#不能转换,运行后会出错



# 定义了__index__函数,但是返回值不是int类型,不能转换

class Student:

    def __init__(self, name, age):

        self.name = name

        self.age = age



    def __index__(self):

        return self.name



a = Student('Kim', 10)

#print(oct(a))#不能转换,运行后会出错



# 定义了__index__函数,而且返回值是int类型,能转换

class Student:

    def __init__(self, name, age):

        self.name = name

        self.age = age



    def __index__(self):

        return self.age



a = Student('Kim', 10)

print(oct(a))

执行后会输出:

0o12

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值