More pythonic path for conditional variable

This is what I am trying to do:

  • Get some arguments
  • Based on the arguments, create a string
  • Returns a string

However, for this I could see 3 possible ways:

def form_statement(subject, verb, object):
    greetings = ""
    if subject in ("Paul", "Raj"):
        greetings = "mister"
    return "%s %s %s %s" % (subject, verb, object, greetings)

The second way to do this:

def form_statement(subject, verb, object):
    if subject in ("Paul", "Raj"):
        greetings = "mister"
    else:
        greetings = ""
    return "%s %s %s %s" % (subject, verb, object, greetings)

And the third way:

def form_statement(subject, verb, object):
    greetings = "mister" if subject in ("Paul", "Raj") else ""
    return "%s %s %s %s" % (subject, verb, object, greetings)

Is there any other better way to do something like this? Right now I am choosing the first method, since the โ€œprocessingโ€ for receiving the welcome line is the function itself and makes the line more than 80 characters when the third method is used.

EDIT: , - , , ( ). , , , , . , , , .

+4
4

pythonic greetings, dict.get(), , , .

main_dict = {"Paul":"mister", "Raj": "mister"}

def form_statement(main_dict, subject, verb, object):
    greetings = main_dict.get(subject, '')
    return "{} {} {} {}".format(subject, verb, object, greetings)

, . -, - O (1). .

+1

greetings, .

. , . , - . , if-else , (A if cond else B) .

, .


BTW, : name in {"Paul", .... }

+1

, "mister", , . get "" , .

pairings = [(("Paul", "Raj"), "mister"), (("Anna", "Paula"), "madam")]
greetings = {name: title for names, title in pairings for name in names}

def form_statement(subject, verb, object):
    return "%s %s %s %s" % (subject, verb, object, greetings.get(subject, ""))
0

. args , .

def form_statement(*args):
    args = list(args)
    if args[0] in ["Paul", "Raj"]:
        args.append("mister")
    return " ".join(args)

( , , $ py.test greet.py:

def test_paul():
    assert form_statement("Paul", "get", "well") == "Paul get well mister"


def test_raj():
    assert form_statement("Raj", "get", "well") == "Raj get well mister"


def test_else():
    assert form_statement("John", "get", "well") == "John get well"

EDIT: โ€‹โ€‹ :

@thiruvenkadam, . .

def form_statement(subject, verb, object):
    if subject in ["Paul", "Raj"]:
        return " ".join([subject, verb, object, "mister"])
    else:
        return " ".join([subject, verb, object])

.

0

All Articles