第21条-用只能以关键字形式指定的参数来确保代码明晰

第21条-用只能以关键字形式指定的参数来确保代码明晰

关键字参数可以通过位置参数传参

问题: 1 函数是如何接受参数的 ?

def safe_division(
        number, divisor,
        ignore_overflow=False,
        ignore_zero_division=False):

    try:
        print('no error')
        return number / divisor
    except OverflowError:
        print('ignore_overflow is {}'.format(ignore_overflow))
        if ignore_overflow:
            return 0
        else:
            print('OverflowError')
            # raise
    except ZeroDivisionError:
        print('ignore_zero_division is {}'.format(ignore_zero_division))
        if ignore_zero_division:
            return float('inf')
        else:
            print('ZeroDivisionError')
            # raise

# pass
print(safe_division(1, 10 ** 500, False, False))
print('==========')
print(safe_division(1, 10 ** 500, True, False))
print('==========')
print(safe_division(1, 0, True, True))
print('==========')
print(safe_division(1, 0, True, False))
print('==========')
# no error
# 0.0
# ==========
# no error
# 0.0
# ==========
# no error
# ignore_zero_division is True
# inf
# ==========
# no error
# ignore_zero_division is False
# ZeroDivisionError
# None
# ==========
# no error
# ignore_zero_division is True
# inf

以上写法存在的弊端为:函数定义了关键字参数,但是均可以通过位置参数与关键子参数传参,而位置参数容易导致传参错误

改进方向:必须以关键字的方式传参

#PYHTON2

def safe_division(number, divisor, **kwargs):
    ignore_overflow = kwargs.pop('ignore_overflow', False)
    ignore_zero_div = kwargs.pop('ignore_zero_division', False)
    if kwargs:
        raise TypeError('Unexpected **kwargs: %r' % kwargs)
    try:
        return number / divisor
    except OverflowError:
        if ignore_overflow:
            return 0
        else:
            return 'OverflowError'
            # raise
    except ZeroDivisionError:
        if ignore_zero_div:
            return float('inf')
        else:
            return 'ZeroDivisionError'
            # raise

print(safe_division(1, 0, ignore_overflow=True, ignore_zero_division=True))
# inf
print(safe_division(1, 10 ** 500, True, False))
# TypeError: safe_division() takes 2 positional arguments but 4 were given

#PYTHON3
# 星号 位置参数的结束标志
def safe_division(
        number, divisor, *,
        ignore_overflow=False,
        ignore_zero_division=False):
    try:
        return number / divisor
    except OverflowError:
        if ignore_overflow:
            return 0
        else:
            return 'OverflowError'
            # raise
    except ZeroDivisionError:
        if ignore_zero_division:
            return float('inf')
        else:
            return 'ZeroDivisionError'
            # raise

print(safe_division(1, 0, ignore_overflow=True, ignore_zero_division=True))
# output:
# inf

print(safe_division(1, 10 ** 500, True, False))
# output
# TypeError: safe_division() takes 2 positional arguments but 4 were given

原文地址:https://www.cnblogs.com/max520liuhu/p/12046029.html

时间: 2024-10-22 05:03:23

第21条-用只能以关键字形式指定的参数来确保代码明晰的相关文章

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询大多数的MySQ

mysql优化21条

今天一个朋友向我咨询怎么去优化 MySQL,我按着思维整理了一下,大概粗的可以分为21个方向. 还有一些细节东西(table cache, 表设计,索引设计,程序端缓存之类的)先不列了,对一个系统,初期能把下面做完也是一个不错的系统. 1. 要确保有足够的内存 数据库能够高效的运行,最关建的因素需要内存足更大了,能缓存住数据,更新也可以在内存先完成.但不同的业务对内存需要强度不一样,一推荐内存要占到数据的15-25%的比例,特别的热的数据,内存基本要达到数据库的80%大小. 2. 需要更多更快的

hdu3416 判断最短路是否唯一(每条边只能走一次)

Marriage Match IV Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3147    Accepted Submission(s): 946 Problem Description Do not sincere non-interference. Like that show, now starvae also take

CakePHP程序员必须知道的21条技巧

这篇文章可以说是CakePHP 教程中最经典的了.虽然不是完整的手把手系列, 但作者将自己使用CakePHP 的经验总结了21条,这些尤其是对新手十分有用. 翻译时故意保留了一些CakePHP 中特有的词语没有翻译, 如controller.model等.相信学过CakePHP 的人应该马 这篇文章可以说是CakePHP 教程中最经典的了.虽然不是完整的手把手系列, 但作者将自己使用CakePHP 的经验总结了21条,这些尤其是对新手十分有用. 翻译时故意保留了一些CakePHP 中特有的词语没

学习笔记_springmvc注解形式的开发参数接收

springmvc基于注解的开发 注解第一个例子 1. 创建web项目 springmvc-2 2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- sprimgmvc 注解驱动 --> <!-- <mvc:annotation-driven /> --> <!-- springmvc的扫描器,一旦有扫描器的定义上面的mvc:annotation.. 就不需要了,扫描器已经有哪里注解驱动的功能 --> <context:compon

网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)

网站推广优化教程100条(完整版)下面介绍新手建站推广完美教程,各位根据自己的实际情况酌情选用: 1.准备个好域名.①.尽量在5位数内,当然也不一定,反正要让用户好记.(看个人):②.尽量用顶级的域名,搜索排名感觉好一点.③.做中文站最好用拼音注册,不要问为什么.看百度(baidu.com)就是很好证明.④.域名的安全性,最好选择有些权威的注册商.⑤.好域名或者说主域名最好注册3年以上,因为百度在扒正规站的毛的时候,会看这些资料,他会觉得你不会很快转行的-- 2.网站空间很重要①.速度打开速度慢

MySQL性能优化的最佳21条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1.为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MyS

mysql优化的21条经验

1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了.这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的.因为,我们某些查询语句会让MySQL不使用缓存.请看下面的示例: // 查询缓存不开启 $r = mysql_query("SELECT username FROM user

mysql优化21条经验(转)

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序 员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的 SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被