zoukankan      html  css  js  c++  java
  • effective python 读书笔记:第20条-用None和文档字符串来描述具有动态默认值的参数

    第20条-用None和文档字符串来描述具有动态默认值的参数

    关键:
    1 参数的默认值
    特点: 包含代码的模块一旦加载进来,参数的默认值就不变了
    2 动态设置默认值
    把默认值设置为None,如果发现参数的值为None,就设置为默认值

    先看一个示例

    def log1(content, when=datetime.utcnow()):
        print("content: {content}, when: {when}".format(content=content, when=when))
    
    
    def log2(content, when=None):
        """
        :param content:
        :param when:
        :return:
        """
        when = datetime.utcnow() if when is None else when
        print("content: {}, when: {}".format(content, when))
    
    
    def process():
        log1('test1')
        time.sleep(1)
        log1('test2')
        print('=====')
        log2('test1')
        time.sleep(1)
        log2('test2')
    
    
    if __name__ == "__main__":
        process()
    
    #输出
    content: test1, when: 2019-12-08 14:47:52.839435
    content: test2, when: 2019-12-08 14:47:52.839435
    =====
    content: test1, when: 2019-12-08 14:47:53.841040
    content: test2, when: 2019-12-08 14:47:54.842983
    
    
    

    接着再看下一个示例:

    import json
    
    
    # global var default of dict type which is mutable
    def decode_data(data, default={}):
        try:
            return json.loads(data)
        except Exception as e:
            # print(e)
            return default
    
    
    foo = decode_data('name')
    foo['name'] = 's'
    
    bar = decode_data('age')
    bar['age'] = 18
    
    print('foo:', foo)
    print('bar:', bar)
    print('foo is bar:', foo is bar)
    print(id(foo) == id(bar))
    # foo: {'name': 's', 'age': 18}
    # bar: {'name': 's', 'age': 18}
    # foo is bar: True
    # True
    
    
    def decode_data_test(data):
        print('
    ====decode_data_test')
    
        def decode_data(data, default={}):
            try:
                return json.loads(data)
            except Exception as e:
                # print(e)
                return default
        return decode_data(data)
    
    
    foo = decode_data_test('name')
    foo['name'] = 's'
    
    bar = decode_data_test('age')
    bar['age'] = 18
    
    print('foo:', foo)
    print('bar:', bar)
    print('foo is bar:', foo is bar)
    print(id(foo) == id(bar))
    
    # ====decode_data_test
    #
    # ====decode_data_test
    # foo: {'name': 's'}
    # bar: {'age': 18}
    # foo is bar: False
    # False
    
    
    仙衣眠云碧岚袍,一襟潇洒,两袖飘飘。玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
  • 相关阅读:
    mysql-5.7 show engine innodb status 详解
    mysql-5.7 saving and restore buffer pool state 详解
    mysql-5.7 监控innodb buffer pool load 的进度 详解
    python3 functools partial 用于函数的包装器详解
    mysql-5.7 innodb change buffer 详解
    mysqlbackup 重建带有gtid特性的slave
    将python图片转为二进制文本的实例
    nginx: [error] invalid PID number "" in "/run/nginx.pid"
    ubuntu中执行定时任务crontab
    Matplotlib:mpl_toolkits.mplot3d工具包
  • 原文地址:https://www.cnblogs.com/max520liuhu/p/12008550.html
Copyright © 2011-2022 走看看