博客
关于我
python--高级应用总结
阅读量:796 次
发布时间:2023-03-08

本文共 1740 字,大约阅读时间需要 5 分钟。

1. slots 使用

定义一个特殊的__slots__变量,来限制该class实例能添加的属性。

class Person(object):    __slots__ = ("name", "age")p = Person()p.name = "老王"p.age = 20p.score = 100

运行这段代码时,p.score = 100会抛出一个AttributeError,说明p没有score这个属性。这表明使用__slots__后,实例只能定义指定的属性,其他都无法添加。这在内存管理上非常有用,尤其是在处理大量对象时。

注意事项:

  • 使用__slots__要注意,__slots__定义的属性仅对当前class实例起作用,对继承的子类是不起作用的。

2. 生成器

  • 创建生成器的方法:
    • 只要将一个列表生成式的[]改成( )即可。
  • G = (x * 2 for x in range(5))

    输出显示G是一个generator对象。

    1. 使用yield:
      • yield语句可以让函数返回一个生成器。
    2. def fib(times):    n = 0    a, b = 0, 1    while n < times:        yield a        a, b = b, a + b        n += 1

      迭代与迭代器的概念:

      • 所有可作用于for循环的对象都是Iterable类型;
      • 所有可作用于next()函数的对象都是Iterator类型;
      • 列表、字典、字符串等集合数据类型是Iterable但不是Iterator,可以通过iter()函数获得一个Iterator对象。

      3. 判断可迭代对象

      使用isinstance()判断一个对象是否是Iterable对象:

      from collections import Iterableisinstance([], Iterable)  # True

      判断迭代器:

      from collections import Iteratorisinstance((x for x in range(10)), Iterator)  # True

      4. LEGB 规则

      Python使用LEGB的顺序来查找一个符号对应的对象:

    3. locals:当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量;
    4. enclosing:外部嵌套函数的命名空间(闭包中常见);
    5. globals:全局变量,函数定义所在模块的命名空间;
    6. builtins:内建模块的命名空间。
    7. 示例:

      def fun1():    a = 10    def fun2():        print(a)  # a位于外部嵌套函数的命名空间
      a = 1def fun():    global a    a = 2  # 修改全局变量

      内建模块:

      • Python在启动时自动载入内建函数和类,如dict、list、str等,存放在__builtin__模块中。
      • 使用dir(__builtin__)查看内建模块中的内容。
      • 内建模块中的功能可以直接使用,不需要前缀。

      5. ==、is

    8. is:比较两个引用是否指向了同一个对象(引用比较);
    9. ==:比较两个对象是否相等。
    10. 示例:

      a = 5b = 5print(a is b)  # Falseprint(a == b)  # True

      6. 私有化

    11. 父类中属性名为__名字的,子类不继承,子类不能访问;
    12. 如果在子类中向__名字赋值,那么会在子类中定义一个与父类相同名字的属性;
    13. _名的变量、函数、类在使用from xxx import *时都不会被导入。
    14. 示例:

      class Parent(object):    __slot = "属性"    _slot = "_属性"class Child(Parent):    __slot = "子类属性"    def __init__(self):        super(Child, self).__setattr__("slot", "子类属性值")

      结论

      通过以上知识,我们可以更好地理解和利用Python的内机制,提升代码的性能和可维护性。

    转载地址:http://awlfk.baihongyu.com/

    你可能感兴趣的文章
    python基础系列四:字符串,列表,字典,元组之间的转换
    查看>>
    python基础篇(9):模块
    查看>>
    python基础篇(8):异常处理
    查看>>
    python基础篇(8):字符串常用处理汇总
    查看>>
    python基础篇(7):函数进阶知识点
    查看>>
    python基础篇(6):global关键字
    查看>>
    python基础篇(5):None类型
    查看>>
    python基础篇(4):range语句
    查看>>
    python基础篇(3):print()补偿知识点
    查看>>
    python基础篇(2):字符串扩展知识点
    查看>>
    python基础篇(1):type()
    查看>>
    python基础篇(15):闭包
    查看>>
    python基础篇(14):多态
    查看>>
    python基础篇(13):类型注解
    查看>>
    python基础篇(12):继承
    查看>>
    python基础篇(11):封装
    查看>>
    python基础篇(10):自定义包
    查看>>
    python基础篇(10):类、对象与构造方法
    查看>>
    python系列【仅供参考】:python测试javaSDK总结
    查看>>
    python系列【仅供参考】:python斗地主
    查看>>