• 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__ 方法:

  • 相关阅读:
    VS自带的dbghelp.h文件 报错
    Windows 自带的截屏功能
    CentOS 7 安装
    Windows 远程连接 CentOS 7 图形化桌面
    <<、|=、&的小例子
    pip 安装库过慢
    pip -i 和 -U 参数
    windows下安装TA-Lib库
    vector、map 判断某元素是否存在、查找指定元素
    vector push_back报错
  • 原文地址:https://www.cnblogs.com/PiaYie/p/14273538.html
Copyright © 2020-2023  润新知