【Python】使用Dot方式访问效率分析

Python Import 效率对比

1、文件目录结构

├── JupyerMain.ipynb
├── module_a
│   ├── __init__.py
│   └── func_a.py
└── module_b
    ├── __init__.py
    └── class_func.py

2、文件内容

module_a.func_a.py

def func(a, b):
    return a, b

module_b.class_func.py

class B(object):
    @classmethod
    def func(cls, a, b):
        return a, b

3、测试文件及其结果

JupyerMain.ipynb

  • 直接模块引入方法

    from module_a.func_a import func
    
    
    def test_func():
        func(1, 2)
    
    %timeit -n 1000000 test_func()
    

​ 129 ns ± 3.65 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

  • 引入模块

    from module_a import func_a
    
    
    def test_func():
        func_a.func(1, 2)
    
    %timeit -n 1000000 test_func()
    

    159 ns ± 6.55 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

  • 模块直接引入类(类方式)

    from module_b.class_func import B
    def test_func():
        B.func(1, 2)
    
    %timeit -n 1000000 test_func()
    

    183 ns ± 6.12 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

  • 引入模块(类方式)

    from module_b import class_func
    
    
    def test_func():
        class_func.B.func(1, 2)
    
    %timeit -n 1000000 test_func()
    

    212 ns ± 6.03 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

  • 引入后重新赋值方式

    from module_b import class_func
    B = class_func.B
    
    def test_func():
        B.func(1, 2)
    
    %timeit -n 1000000 test_func()
    

    187 ns ± 4.93 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

主要原因:python中使用dot符号访问对性能影响较大,在规范的前提下,应当尽可能避免使用dot访问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值