Day 8:16 个类型函数和 10 个类对象相关的内置函数盘点

c++中面向对象的编程思想在python中可以很好的类比。

下面将介绍Python中类型创建、管理自定义类的相关内置函数。

函数作用域问题

  在写程序的时候,我们会定义各种变量、全局变量、局部变量等,Python中查找变量的顺序遵循LEGB规则,即当遇到每个变量时,python解释器:

  1. 优先从它所属的函数(Local)内查找;
  2. 若找不到,并且它位于一个内嵌函数中,就再到它的父函数(Enclosing)中查找;
  3. 如果还是找不到,再去全局作用域(Global)查找;
  4. 再找不到,最后去内置作用域(Build-in)查找。
  5. 若还是找不到,报错。

min 函数属于 Python 中内置函数,所以在搜寻完 LEG 三个区域后,最终在 build-in 域被找到。

如果在四个域中都未找到某个变量,一般就会抛出 NameError: name '****变量**' is not defined。

类型函数

bool([x])

测试一个对象是 True,还是 False。

bytes([source[, encoding[, errors]]])

将一个字符串转换成字节类型:

str(object='')

 将字符类型、数值类型等转换为字符串类型:

chr(i)

查看十进制整数对应的 ASCII 字符:

ord(c)

查看某个 ASCII 字符对应的十进制数:

dict()

用来创建字典:

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

object()

返回一个根对象,它是所有类的基类。

 值得一提的是,查看obj对象上的方法有什么,__dir_() 函数

int(x)

int(x, base =10),x 可能为字符串或数值,将 x 转换为一个整数

如果x不是一个数字,或者给定了base,那么x必须是一个字符串、字节或字节数组实例,代表一个radix base的整数文字。可以选择在文字前面加上+或-(中间没有空格),并且用空格包围。一个基数为n的文字由数字0到n-1组成,a到z(或A到Z)的值为10到35。默认的基数是10。允许的值是0和2-36。基数为2、-8和-16的字元可以选择用0b/0B、0o/0O或0x/0X作为前缀,就像代码中的整数字元一样。基数0的意思是完全按照代码文字解释,所以实际的基数是2、8、10或16,所以int('010',0)不合法,而int('010')合法,以及int('010',8)合法。

float(x)

将一个字符串或整数转换为浮点数:

frozenset([iterable])

创建一个不可修改的冻结集合,一旦创建不允许增删元素。

 普通的集合能够通过 add(i)pop() 函数来增加一个元素和移除集合中的第一个元素.

list([iterable])

返回可变序列类型:列表.listlistlist , 作用就是把可迭代类型(Iterable)转化为列表。

使用 map 函数,转化列表内每一个整形元素为字符串型。同时,m 是可迭代类型,经过 list 转化后,得到列表 l1:

 

range(stop);range(start, stop[,step])

Python 提供两个内置的 range 函数,生成不可变序列:

set([iterable])

 返回一个集合对象,并允许创建后再增加、删除元素。容器里不允许有重复元素

slice(stop);slice(start, stop[, step])

返回一个由 range(start, stop, step) 所指定索引集的 slice 对象:

 

tuple([iterable])

 创建一个不可修改的元组对象:

type(object);type(name, bases, dict)

显然,这是查看对象的类型的函数。

zip(*iterables)

创建一个迭代器,聚合每个可迭代对象的元素,参数前带 *,意味着是可变序列参数,可传入 1 个,2 个或多个参数。

类对象及属性

classmethod

classmethod 修饰符对应的函数不需要实例化,不需要 self 参数。

第一个参数需要是表示自身类的 cls 参数,能调用类的属性、方法、实例等。

 

delattr(object, name)

删除对象的属性,在不需要某个或某些属性时,这个方法就会很有用。

dir([object])

不带参数时,返回当前范围内的变量、方法和定义的类型列表;

带参数时返回参数的属性、方法列表。

dir()
dir(xiaoming)

hasattr(object, name)

检查对象上是否有查询的name方法or属性

isinstance(object, classinfo)

判断 object 是否为类 classinfo 的实例,若是,返回 true。

序列类型的基类为 Iterable(可迭代类型),所以返回 True:

 

issubclass(class, classinfo)

如果 class 是 classinfo 类的子类,返回 True:

 classinfo 取值也可能为元组,若 class 是元组内某个元素类型的子类,也会返回 True:

property(fget=None, fset=None, fdel=None, doc=None)

 这样对类属性得定义,就是绕过了初始化这一层,还有一种方法,使用
Python 装饰器 @property,同样能实现对类上属性的定义 ,并且更简洁:

super([type[, object-or-type]])

返回一个代理对象,它会将方法调用委托给 type 的父类或兄弟类。

如下,子类的 add 方法,一部分直接调用父类 add,再有一部分个性的行为:打印结果。

callable(object)

判断对象是否可被调用,能被调用的对象就是一个 callable 对象,比如函数 str、int 等都是可被调用的

 上面的例子可以看到,这样定义的实例不可以被调用,实例要怎么像函数一样被调用呢?

有方法!重写 Student 类上 __call__ 方法:

原文地址:https://www.cnblogs.com/PiaYie/p/14273538.html