惯用Python:大小写不敏感

惯用Python:大小写不敏感,python,case-sensitive,idioms,Python,Case Sensitive,Idioms,我发现Python最难的事情是进入Python的“思维模式”。习惯用户被认为是有能力的成年人是不一样的,因为我已经接受了这么长时间的培训,你可以保护你的代码不被滥用 以以下内容为例: TEMPS = { 'Low': 300, 'Medium': 350, 'High': 425, 'Broil': 500 } def check_temp(temp_input): """User must match key in TEMPS exactly"""

我发现Python最难的事情是进入Python的“思维模式”。习惯用户被认为是有能力的成年人是不一样的,因为我已经接受了这么长时间的培训,你可以保护你的代码不被滥用

以以下内容为例:

TEMPS = {
    'Low': 300,
    'Medium': 350,
    'High': 425,
    'Broil': 500
}

def check_temp(temp_input):
    """User must match key in TEMPS exactly"""
    if temp_input in TEMPS:
        print(TEMPS.get(temp_input))

def ci_check_temp(temp_input):
    """User must only match case-insensitively"""
    if temp_input.upper() in (temp.upper() for temp in TEMPS.keys()):
        print(TEMPS.get(temp_input.capitalize()))

>>>check_temp('Low')
300
>>>ci_check_temp('Low')
300
>>>check_temp('LoW')
>>>ci_check_temp('LoW')
300
>>>check_temp('MediuM')
>>>ci_check_temp('MediuM')
350
那么,我们是否应该假设用户(无论是程序员还是最终用户)是有能力的成年人,并在类似的情况下强制进行精确匹配,或者我们应该引导他们并做出一些小的假设,比如他们在上面的示例中键入“Low”时可能表示“Low”?还是这取决于每个案例?在大多数情况下,我应该使选项不区分大小写,还是让用户在使用python库时出错,并可能处理后果


我不想假设用户试图破坏我的代码并且是恶意的,但我不想假设他们也不会犯诚实的错误。Python的中间立场在哪里?

假设用户试图破坏您的代码。传统的方法是将用户输入的小写(或大写)与预大小写字符串(或类似字符串)进行比较。在这种情况下,将密钥设置为小写。为什么不将密钥设置为小写,并在尝试dict之前降低每个字符串的值?我认为Python中“同意成年人”的想法更多地与程序员有关,而不是与用户有关(例如,没有私有类成员)。应假设用户会做出合理的错误。当降低(或提高)用户输入时,是否允许重新定义参数,或者是否应创建新变量?例如,python程序员会不会在:def my_function(input_str):input_str=input_str.lower()#用input做点什么?我第一次看到python时的个人经历确实是:嗯,人们会时不时地以非预期的方式做事情。但是Python允许您非常声明性:通常您不更改列表,而是构建一个新列表,在其中过滤掉不需要的值,等等。如果您以错误的方式使用Python,它肯定会引入错误,但是从您过度更改数据结构的那一刻起,您应该开始思考:“嗯。。。必须有一种更优雅的方式。”