繁体   English   中英

无论参数类型如何,调用函数的正确方法

[英]Correct approach for calling a function regardless of parameter type

我有一个打印乘法表的程序。

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函数?

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

一种好方法是:

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本身不是类型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)

像他们说的那样,

放弃让您怀疑的一切

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM