无论参数类型如何,都可以正确调用函数

时间:2012-09-21 07:30:05

标签: 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

print_tablesif块中调用else函数对我来说确实有点多余。

有没有更好的方法在Python中调用print_tables函数而不考虑参数类型?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

一个好方法是:

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

print_tables(user_input)

也就是说,有一个电话,但将不同的案例汇集到一个变量中。

答案 2 :(得分:1)

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)

正如他们所说,

  

放弃任何让你怀疑的东西