suggestions on passing a json as a function input
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
add a comment |
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
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
add a comment |
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
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
python
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Nov 27 '18 at 1:49
KrishnaKrishna
6021515
6021515
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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