On 2019-04-26 16:56, Sebastian Kreft wrote:

On Fri, Apr 26, 2019 at 11:07 AM Joshua Marshall <j.marsh...@arroyo.io <mailto:j.marsh...@arroyo.io>> wrote:

    Hello all,

    I have a use case where I need to send a `dict` to a module as an
    argument.  Inside of this, it has a multi-level structure, but each
    field I need to set may only be set to a single value.  Fields must
    be valid, non-empty strings.  It looks a lot like the following in
    my code:

    ```
    def my_func(val_1, val_2):
         return {
             "field_1": val_1,
             "next_depth": {
                 "field_2": val_2
             }
         }
    ```

    What I want to do is:
    ```
    def my_func(val_1, val_2):
         return {
             "field_1": val_1 if val_1,
             "next_depth": {
                 "field_2": val_2 if val_2
             }
         }
    ```

If val_2 here evaluates to falsey, will next_depth still be defined? From the code I would say that no. But your use case may require to not define the next_depth subdict without any values, as that may break the receiver expectations (think of JSON Schema).

From the code I would say yes. If you didn't want the subdict, you would've written:

    def my_func(val_1, val_2):
         return {
             "field_1": val_1 if val_1,
             "next_depth": {
                 "field_2": val_2
             } if val_2
         }


    Or:
    ```
    def my_func(val_1, val_2):
         return {
             if val_1 : "field_1": val_1,
             "next_depth": {
                 if val_2: "field_2": val_2
             }
         }
    ```


    def my_func(val_1, val_2):
         return {
             if val_1 : "field_1": val_1,
             if val_2: "next_depth": {
                 "field_2": val_2
             }
         }

[snip]

The first form is too easily confused with the ternary 'if'.

In Python, an expression never starts with an 'if', so the second form would be a better syntax for an optional entry.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to