• 优化python程序的几点建议


    1、在需要只读序列时,最好使用元组而非列表;

    2、使用生成器yield,而不是创建大的元组和列表并在其上进行迭代处理;

    3、尽量使用python内置的数据结构,而不实现自己的自定义结构;

    4、从小字符串中产生大字符串时,不要对小字符串进行连接,而是在列表中累积,最后将字符串列表结合成一个单独的字符串;

    5、如果某个对象需要多次使用属性访问,或从某个数据结构中进行访问,那么较好的做法是创建并使用一个局部变量来访问对象。

    6、可使用字典对多个类似的elif分支进行简化;

    functions=dict(a=add,b=edit,l=list)

    functions[recieve]()      其中add(),edit(),list()为函数名,recieve为接收的参数;

    7、打开读写文件用上下文管理器with语句;

    下面是对python复杂语法的一点补充:

    1、动态程序设计与内省函数:

    1 __import__()            根据模块名导入模块;
    2 delattr(obj,name)       从对象obj中删除名为name的属性;
    3 getattr(obj,name,val)    返回对象obj中名为name的属性值,如果没有这一属性,并且给定了val参数,就返回val;
    4 setattr(obj,name,val)    将对象obj中名为name的属性值设置为val,必要时候创建该属性;
    5 hasattr(obj,name)       如果对象obj中有名为name的属性,就返回True;
    6 locals()              返回当前本地上下文的字典;
    7 globals()             返回当前全局上下文的字典;
    8 type(obj)             返回对象obj的类型对象;
    9 vars(obj)             以字典形式返回对象obj的上下文,如果没有给定obj,就返回本地上下文;

    2、修饰器

    修饰器是一个函数,接受一个函数或方法作为其唯一的参数,并返回一个新函数或方法。

    一个简单的修饰器函数:

    1 def positieResult(function):
    2     def wrapper(*args,**kwargs):
    3         result=function(*args,**kwargs)
    4         assert result>=0,function.__name__+"()result isn't>=0"
    5         return result
    6     wrapper.__name__=function.__name__
    7     wrapper.__doc__=function.__doc__
    8     return wrapper

    也可用functools模块的wraps函数来取代最后对函数的同步语句:

    @functools.wraps(function)

    def wrapper(*args,**kwargs):

           ...

    也可在此函数的外国再包一层函数来给修饰器增加可传递参数。

    3、def a() ->bool:

           suite

    表示对函数使用时加注释(3.5后加的新功能)

    4、函子另一种包含了特殊方法__call()__的类。它提供的一个关键好处就是可以维护一些状态信息。

    闭包:

    def make_strip_function(characters):
        def strip_function(string):
            return string.strip(characters)
        return strip_function

    使用方法:

        strip_a=make_strip_function(',:;.!?')
        strip_a('ladys!')  #returns:'ladys'

    相当于二次传参,下面的函子具有相同的功能和用法

    class Strip:
        def __init__(self,characters):
            self.characters=characters
        def __call__(self,string)
            return string.strip(self.characters)
  • 相关阅读:
    flexbox弹性盒子布局
    LAMP环境 源码包安装
    用条件注释判断浏览器版本,解决兼容问题
    事件冒泡和事件捕获
    为js和css文件自动添加版本号
    uEditor独立图片上传
    修改netbeans模版头部的说明
    thinkphp多表关联并且分页
    thinkphp 独立分组配置
    荣耀路由HiLink一键组网如何实现?
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7216889.html
Copyright © 2020-2023  润新知