为了账号安全,请及时绑定邮箱和手机立即绑定

python函数问题,个人突然觉得C语言类型检查很有用

任务

首先请定义一个 square_of_sum 函数,它接受一个list,返回list中每个元素平方的和。

我的代码:

def square_of_sum(L):

    sum = 0

    for x in L:

        sum = sum + x*x

        return sum

print square_of_sum([1, 2, 3, 4, 5])

print square_of_sum([-5, 0, 5, 15, 25])


完美结果,正确了。但是引发我的思考。这里参数L应该就是一个普通变量,于是我把代码改成

def square_of_sum(L):

    if L>=0:

        return L

    else:

        return -L

print square_of_sum(-6)


结果为6,验证了我的想法。

于是我又仔细看了第一次函数的代码,发现从这里无法判断L是不是List,也有可能是set,tuple.

我于是又写了下面代码

def square_of_sum(L):   

    sum = 0

    for x in L:

        sum = sum + x*x

    return sum

print square_of_sum((1, 2, 3, 4, 5))

print square_of_sum((-5, 0, 5, 15, 25))

结果正确


def square_of_sum(L):   

    sum = 0

    for x in L:

        sum = sum + x*x

    return sum

print square_of_sum(set([1, 2, 3, 4, 5]))

print square_of_sum(set([-5, 0, 5, 15, 25]))

结果正确


所以我明白了,刚才为了完成任务的函数代码,参数其实可以为3个。可以从函数块代码看出来(只能从这看出来函数参数的类型)


这里只说要List为参数,但是多了2个类型的参数。

假如我写了一个函数只能接受一个类型的参数,接受其它类型的参数返回结果就不是预期的了。刚好这个函数也可以接受其它参数,但是代码中不会报错,这样程序就会出现问题啊,所以我觉得C语言类型检查是很用的。




正在回答

2 回答

python里面也有类型检查的呀,比如你可以在square_of_sum()中定义一下:

if isinstance(L, list): do something,就会只在L为list类型参数时触发了

0 回复 有任何疑惑可以回复我~
#1

慕瓜5474458 提问者

非常感谢!
2016-08-10 回复 有任何疑惑可以回复我~

谢谢,但是如果传其它参数,不是list,难道要写报错代码?这样就麻烦了,语言的机制是没有类型检查的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

python函数问题,个人突然觉得C语言类型检查很有用

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信