suggestions on passing a json as a function input












0















I am planning to write a routine to achieve below functionality: According to the "method", and "before" and "after", compute the expense. Not sure if passing a json as an input of the function is a good practice? Does it mean the function is trying to achieve too much? When I assign a default value to "target", Pycharm gives warning "mutable object as default argument".



def assign_expense(target={'fly':{'before':'US', 'after':'JP'}, 'walk':{'before':'blockA', 'after':'blockB'})
method, before, after = abstract_param_from_json(target)
if method='fly':
if before=='US', after=='JP':
func_fly_US_JP

elif before=='MXN', after=='CAD':
func_fly_MX_CAD
if method='walk':
if before=='blockA', after=='blockB':
func_A_to_B

if before=='blockC', after=='blockZ':
func_C_to_Z









share|improve this question


















  • 1





    You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

    – Jonah Bishop
    Nov 27 '18 at 1:47


















0















I am planning to write a routine to achieve below functionality: According to the "method", and "before" and "after", compute the expense. Not sure if passing a json as an input of the function is a good practice? Does it mean the function is trying to achieve too much? When I assign a default value to "target", Pycharm gives warning "mutable object as default argument".



def assign_expense(target={'fly':{'before':'US', 'after':'JP'}, 'walk':{'before':'blockA', 'after':'blockB'})
method, before, after = abstract_param_from_json(target)
if method='fly':
if before=='US', after=='JP':
func_fly_US_JP

elif before=='MXN', after=='CAD':
func_fly_MX_CAD
if method='walk':
if before=='blockA', after=='blockB':
func_A_to_B

if before=='blockC', after=='blockZ':
func_C_to_Z









share|improve this question


















  • 1





    You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

    – Jonah Bishop
    Nov 27 '18 at 1:47
















0












0








0








I am planning to write a routine to achieve below functionality: According to the "method", and "before" and "after", compute the expense. Not sure if passing a json as an input of the function is a good practice? Does it mean the function is trying to achieve too much? When I assign a default value to "target", Pycharm gives warning "mutable object as default argument".



def assign_expense(target={'fly':{'before':'US', 'after':'JP'}, 'walk':{'before':'blockA', 'after':'blockB'})
method, before, after = abstract_param_from_json(target)
if method='fly':
if before=='US', after=='JP':
func_fly_US_JP

elif before=='MXN', after=='CAD':
func_fly_MX_CAD
if method='walk':
if before=='blockA', after=='blockB':
func_A_to_B

if before=='blockC', after=='blockZ':
func_C_to_Z









share|improve this question














I am planning to write a routine to achieve below functionality: According to the "method", and "before" and "after", compute the expense. Not sure if passing a json as an input of the function is a good practice? Does it mean the function is trying to achieve too much? When I assign a default value to "target", Pycharm gives warning "mutable object as default argument".



def assign_expense(target={'fly':{'before':'US', 'after':'JP'}, 'walk':{'before':'blockA', 'after':'blockB'})
method, before, after = abstract_param_from_json(target)
if method='fly':
if before=='US', after=='JP':
func_fly_US_JP

elif before=='MXN', after=='CAD':
func_fly_MX_CAD
if method='walk':
if before=='blockA', after=='blockB':
func_A_to_B

if before=='blockC', after=='blockZ':
func_C_to_Z






python






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 27 '18 at 1:40









LisaLisa

1,00511537




1,00511537








  • 1





    You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

    – Jonah Bishop
    Nov 27 '18 at 1:47
















  • 1





    You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

    – Jonah Bishop
    Nov 27 '18 at 1:47










1




1





You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

– Jonah Bishop
Nov 27 '18 at 1:47







You should be very careful about mutable default arguments. They don't necessarily behave the way you think they should (hence the warning from Pycharm).

– Jonah Bishop
Nov 27 '18 at 1:47














1 Answer
1






active

oldest

votes


















2














Regarding your warning mutable object as default argument



Please refer the following



https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html



"Least Astonishment" and the Mutable Default Argument



Mutable objects as default arguments behave like a static variable



And regarding passing JSON as function input, I don't think it is a bad practice by itself unless the function is doing many things on the JSON.



Ex: If you need to delete/process a particular set of keys in the JSON, you need to pass JSON to the function that does the job.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53491561%2fsuggestions-on-passing-a-json-as-a-function-input%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    Regarding your warning mutable object as default argument



    Please refer the following



    https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html



    "Least Astonishment" and the Mutable Default Argument



    Mutable objects as default arguments behave like a static variable



    And regarding passing JSON as function input, I don't think it is a bad practice by itself unless the function is doing many things on the JSON.



    Ex: If you need to delete/process a particular set of keys in the JSON, you need to pass JSON to the function that does the job.






    share|improve this answer




























      2














      Regarding your warning mutable object as default argument



      Please refer the following



      https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html



      "Least Astonishment" and the Mutable Default Argument



      Mutable objects as default arguments behave like a static variable



      And regarding passing JSON as function input, I don't think it is a bad practice by itself unless the function is doing many things on the JSON.



      Ex: If you need to delete/process a particular set of keys in the JSON, you need to pass JSON to the function that does the job.






      share|improve this answer


























        2












        2








        2







        Regarding your warning mutable object as default argument



        Please refer the following



        https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html



        "Least Astonishment" and the Mutable Default Argument



        Mutable objects as default arguments behave like a static variable



        And regarding passing JSON as function input, I don't think it is a bad practice by itself unless the function is doing many things on the JSON.



        Ex: If you need to delete/process a particular set of keys in the JSON, you need to pass JSON to the function that does the job.






        share|improve this answer













        Regarding your warning mutable object as default argument



        Please refer the following



        https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html



        "Least Astonishment" and the Mutable Default Argument



        Mutable objects as default arguments behave like a static variable



        And regarding passing JSON as function input, I don't think it is a bad practice by itself unless the function is doing many things on the JSON.



        Ex: If you need to delete/process a particular set of keys in the JSON, you need to pass JSON to the function that does the job.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 27 '18 at 1:49









        KrishnaKrishna

        6021515




        6021515
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53491561%2fsuggestions-on-passing-a-json-as-a-function-input%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)