[英]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
在if
和else
块中调用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.