减少if语句以最大限度地提高python中的效率

2024-09-30 18:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的函数来构建参数,我想知道在python中有没有其他方法可以这样做,从而提高代码效率。。。在

build_parameters(users[keys]["email"], Null , xsmtpapi, Message_Subject, Message_Content, Message_Content, 'support@brightspyre.com', 'BrightSpyre', 'support@brightspyre.com', Null, Null, Null, Null)

这是函数

^{pr2}$

更新

我已经按照@J0HN的描述更新了代码

_allowed_keys = {'to', 'toname', 'x-smtpapi', 'subject', 'text', 'html', 'from', 'cc', 'ccname', 'bcc', 'bccname', 'fromname', 'replyto', 'date', 'files', 'content', 'headers'}

def build_parameter(**kwargs):
    return {key:value for key, value in kwargs.items() if key in _allowed_keys}


params = build_parameter(to = users[keys]["email"], toname = users[keys]["name"], x-smtpapi = xsmtpapi, subject = Message_Subject,text = Message_Content, html = Message_Content, from = 'support@bs.com', fromname = 'BS', replyto = 'support@bs.com')

错误

params = build_parameter(to = users[keys]["email"],toname = users[keys]["name"], x-smtpapi = xsmtpapi, subject = Message_Subject,text = Message_Content, html = Message_Content, from = '
support@bs.com', fromname = 'BSe', replyto = 'support@bs.com')                                                                                                     
                                                                                                                                                                                        ^    
SyntaxError: invalid syntax 

Tags: tobuildcomsupportmessagebsemailcontent
2条回答
_allowed_keys = {'to', 'toname', 'x-smtpapi', ...]

def build_parameters(**kwargs):
    return {key:value for key, value in kwargs.items() if key in _allowed_keys}

循序渐进:

  • 定义_allowed_keys以包含所有关键字参数的名称。有关详细信息,请参阅set documentation。在
  • 将参数替换为**kwargs。请参阅Understanding kwargs in Python以了解有关它的详细信息。在
  • 使用dictionary comprehensionkwargs生成新词典
  • items用于迭代字典的键值对
  • key in _allowed_keys我相信这是不言自明的

因此,此函数接收任意数量的关键字参数,但筛选出不在_allowed_keys中的键。在

UPD:好,from是一个关键字,x-smtpapi不能是关键字参数,因为它包含-。这是一个预期的行为,但是canonical way来解决它会使整个方法变得无用。在

因此,您需要以不同的方式表示它们,例如:

^{pr2}$

像这样使用build_parameter(_from='from value', x_smtpapi: 'x-smtpapi value', ...)

不过,我不建议这样做,因为这可能会让人很困惑。相反,考虑其他方法,例如,构建一个类来封装创建paramsdict(并且可能使用它)

就建一本字典吧。在

params = {"to": "to value",
          "from": "from value}

没有必要为此使用方法。在

相关问题 更多 >