How to avoid writing request.GET.get() twice in order to print it?

前端 未结 10 763
名媛妹妹
名媛妹妹 2020-12-04 21:34

I come from a PHP background and would like to know if there\'s a way to do this in Python.

In PHP you can kill 2 birds with one stone like this:

Instead of

10条回答
  •  悲&欢浪女
    2020-12-04 22:22

    A variation on Alex's answer:

    class DataHolder:
        def __init__(self, value=None, attr_name='value'):
            self._attr_name = attr_name
            self.set(value)
        def __call__(self, value):
            return self.set(value)
        def set(self, value):
            setattr(self, self._attr_name, value)
            return value
        def get(self):
            return getattr(self, self._attr_name)
    save_data = DataHolder()
    

    Usage:

    if save_data(get_input()):
        print save_data.value
    

    or if you prefer an alternative interface:

    if save_data.set(get_input()):
        print save_data.get()
    

    I would find this helpful to test a series of regular expressions in an if-elif-elif-elif etc construct, as in this SO question:

    import re
    
    input = u'test bar 123'
    save_match = DataHolder(attr_name='match')
    if save_match(re.search('foo (\d+)', input)):
        print "Foo"
        print save_match.match.group(1)
    elif save_match(re.search('bar (\d+)', input)):
        print "Bar"
        print save_match.match.group(1)
    elif save_match(re.search('baz (\d+)', input)):
        print "Baz"
        print save_match.match.group(1)
    

提交回复
热议问题