不管参数类型如何调用函数的正确方法

2024-09-27 02:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个打印乘法表的程序。你知道吗

def print_tables(input):
    for i in xrange(1,11):
        print "%s x %s = %s" %(input, i, input*i)

user_input = raw_input("What do you want multiplied ten fold? ")

if(user_input.isdigit()):
    print_tables(int(user_input))

else:
    print_tables(user_input)

如果用户输入一个字符串"a",我希望输出是:

a x 1 = a
a x 2 = aa
a x 3 = aaa
a x 4 = aaaa
a x 5 = aaaaa
a x 6 = aaaaaa
a x 7 = aaaaaaa
a x 8 = aaaaaaaa
a x 9 = aaaaaaaaa
a x 10 = aaaaaaaaaa

ifelse块中调用print_tables函数对我来说确实有点多余。你知道吗

Python中有没有更好的方法来调用print_tables函数,而不管参数类型是什么?你知道吗


Tags: 函数in程序forinputtablesrawif
3条回答

一个好方法是:

if user_input.isdigit():
    user_input = int(user_input)

print_tables(user_input)

也就是说,只有一个调用,但是将不同的情况汇集到一个变量中。你知道吗

def mul(x, y):
    try:
        return int(x) * y
    except ValueError:
        return x * y

def print_tables(input):
    for i in xrange(1,11):
        print "%s x %s = %s" %(input, i, mul(input, i))

user_input = raw_input("What do you want multiplied ten fold? ")
print_tables(user_input)

解释:print_tables本身不支持类型,也就是说,它在不同参数的类型上没有不同的行为。乘法应该是多态的。所以,一个pythonic的方法就是把这个明确化。你知道吗

再想一想,如果你有一个函数,让你挠头如何调用它,不要试图解决这两种方法的问题。把那个功能去掉!你知道吗

def _print_table(s):
    for i in xrange(1,11):
        print "%s x %s = %s" %(s, i, i * s)

def print_str_table(s):
    return _print_table(str(s))

def print_int_table(s):
    return _print_table(int(s))

user_input = raw_input("What do you want multiplied ten fold? ")
if user_input.isdigit():
    print_int_table(user_input)
else:
    print_str_table(user_input)

就像他们说的

Abandon anything that gives you doubt for what gives you no doubt

print_tables(int(user_input) if user_input.isdigit() else user_input)

相关问题 更多 >

    热门问题