Python标准内置函数(31-35)

版权声明:CSDN原创,请尊重三叔的版权,进Python学习乐园 群: 668758148,大家一起学习! https://blog.csdn.net/asd343442/article/details/84243860

1.31  函数id()

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

id(object)

函数id()的功能是获取对象object的内存地址,这个内存地址是一个整数,能够保证在该对象的生命周期内是唯一的和恒定的。在Python程序中,具有不重叠寿命的两个对象可以具有相同的id()值。

例如在下面的实例文件id.py中,演示了用函数id()获取指定对象内存地址的过程。

a = 1

print(id(a))

print(id(1))

b=1.0

print(id(b))

print(id(1.0))

a = 'some text'

print(id(a))

在上述代码中,1和1.0的内存地址是不同的,所以使用id()执行后的结果也不相同。执行后会输出:

1556399792

1556399792

2893235631592

2893235631592

2893235760496

1.32  函数input()

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

input([prompt])

函数input()的功能是获取用户在控制台中输入的信息。如果有prompt参数,则将它输出到标准输出且不带换行。然后函数input()从标准输入读取一行,将它转换成一个字符串(去掉一个末尾的换行符),然后返回它。当读取到EOF时,会产生EOFError错误。

例如在下面的实例文件input.py中,演示了用函数input()获取控制台信息的过程。

s = input('please input your name:')

print(s)

a = input("input a num:")

①print(type(a))

a = input("input a num:")

②b=eval(a)

③print(type(b))

执行后会输出:

please input your name:guan

guan

input a num:100

<class 'str'>

input a num:100

<class 'int'>

①行代码执行后如果输入了数字“123”,但是执行后函数input()将设置默认输入的是字符串类型,所以执行后显示为“<class 'str'>”。因为在②使用函数eval()将输入的数字“123”进行转换,所以③执行后会显示正确的类型“<class 'int'>”。

1.33  函数int()

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

class int(x=0)

class int(x, base=10)

函数int()的功能是将一个字符串或数字转换为整型。参数x是一个字符串或数字,参数base 表示进制数,默认为十进制。函数int()能够从数字或字符串(x)构造并返回一个整数对象,如果没有给出参数x则返回0。如果 x 是一个数字,返回 x.__int__()。如果x是一个浮点数,将截断到零只取整。如果参数x不是数字,或者如果给定参数base,则x必须是字符串bytes bytearray实例代表基数base中的integer literal。字面量的前面可以有+或者-(中间不能有空格),周围可以有空白。以n为基数的字面量包含数字0到n-1,用a到z(或者A到Z)来表示10到35。Base的默认值是10。如果base为0则意味着完全解释为代码字面值,使得实际基数为2,8,10或16,并且使得int('010',0)是不合法的,而int('010')是以及int('010',8)。

例如在下面的实例文件int.py中,演示了用函数int()处理数字的过程。

#不传入参数时,得到结果0。

print(int())

#传入数值时,调用其__int__()方法,浮点数将向下取整。

print(int(3))



print(int(3.6)) # 传入字符串时,默认以10进制进行转换。

#print(int('3.6'))#这行代码将会出错

print(int('12',16))        # 如果是带参数base的话,12要以字符串的形式进行输入,12 为 16进制

print(int('0xa',16))

print(int('10',8))



#传入字符串,并指定了进制,则按对应进制将字符串转换成10进制整数。

print(int('01',2))

print(int('02',3))

print(int('07',8))

print(int('0f',16))

执行后会输出:

0

3

3

18

10

8

1

2

7

15

在使用函数int()时,允许在处理的字符串中包含"+"、"-"号,但是加减号与数值之间不能有空格,在数值后、符号前可以出现空格。例如下面的演示代码说明了这一点。

>>> int('+36')

36

>>> int('-36')

-36

>>> int('   -36        ')

-36

>>> int(' - 36        ')

Traceback (most recent call last):

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

    int(' - 36        ')

ValueError: invalid literal for int() with base 10: ' - 36

1.34  函数isinstance()

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

isinstance(object, classinfo)
  1. object:实例对象;
  2. classinfo:可以是直接或间接类名、基本类型或者有它们组成的元组。

函数isinstance()的功能是判断一个对象是否是一个已知的类型,其功能类似于函数type()。如果bject对象的类型与参数classinfo的类型相同则返回True,否则返回False。

注意:isinstance()与type()的区别

  1. 函数type()不会认为子类是一种父类类型,不考虑继承关系。
  2. 函数isinstance()会认为子类是一种父类类型,考虑继承关系。
  3. 如果要判断两个类型是否相同,则推荐使用函数isinstance()

例如在下面的实例文件ins.py中,演示了用函数isinstance()处理指定对象的过程。

a = 2

print(isinstance (a,int))

print(isinstance (a,str))

print(isinstance (a,(str,int,list)) )# 是元组中的一个返回 True



print(isinstance(1,int))

print(isinstance(1,str))



# 定义3各类:C继承B,B继承A

class A:

    pass



class B(A):

    pass



class C(B):

    pass



a = A()

b = B()

c = C()

print(isinstance(a,A))#直接实例

print(isinstance(a,B))

print(isinstance(b,A))#子类实例

print(isinstance(c,A))#孙子类实例

执行后会输出:

True

False

True

True

False

True

False

True

True

如果参数object传入的是类型对象,则始终返回False,例如下面的演示过程。

>>> isinstance(str,str)

False

>>> isinstance(bool,int)

False

如果classinfo类型对象是多个类型对象组成的元组,如果object对象是元组的任一类型对象中实例,则返回True,否则返回False。例如下面的演示过程。

>>> isinstance(a,(B,C))

False

>>> isinstance(a,(A,B,C))

True

如果classinfo类型对象不是一个类型对象或者由多个类型对象组成的元组,则会报错(TypeError),例如下面的演示过程。

>>> isinstance(a,[A,B,C])

Traceback (most recent call last):

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

    isinstance(a,[A,B,C])

TypeError: isinstance() arg 2 must be a type or tuple of types

下面的实例代码演示了函数type()与isinstance()的区别:

class A:

    pass



class B(A):

    pass



isinstance(A(), A)                       #returns True

type(A()) == A                           # returns True

isinstance(B(), A)                       # returns True

type(B()) == A                           # returns False

1.35  函数issubclass()

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

issubclass(class, classinfo)
  1. class:类,表示需要检查的类型对象;
  2. classinfo:类,表示需要对比类型对象。

函数issubclass()的功能是判断参数class是否是类型参数classinfo的子类。如果class参数是参数classinfo的类型对象(或者classinfo类对象的直接、间接、虚拟子类)的实例,返回True。

例如在下面的实例文件iss.py中,演示了用函数issubclass()处理指定对象的过程。

print(issubclass(bool, int))

print(issubclass(bool, (str)))



class A:

    pass



class B(A):

    pass



print(issubclass(B, A))  # 返回 True

执行后会输出:

True

False

True

任何一个类都是自己类的子类,即class和calssinfo传入相同类型时会返回True。例如下面的演示过程。

>>> class A:

    pass



>>> issubclass(A,A)

True

如果classinfo类型对象是多个类型对象组成的元组,如果class类型对象是元组的任一类型对象的子类,则返回True,否则返回False。例如下面的演示过程。

>>> issubclass(bool,int)

True

>>> issubclass(bool,str)

False



>>> issubclass(bool,(str,int))

如果classinfo类型对象不是一个类型对象或者由多个类型对象组成的元组,则会报错(TypeError)。例如下面的演示过程。

>>> issubclass(bool,[str,int])

Traceback (most recent call last):

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

    issubclass(bool,[str,int])

TypeError: issubclass() arg 2 must be a class or tuple of classes

猜你喜欢

转载自blog.csdn.net/asd343442/article/details/84243860