刚开始学习Python,请问下面的代码什么意思。多谢各位大神!

defflatten(nested):try:try:nested+''#如果nested=['abc',1,2,3,4],那么nested+‘’可以执行吗?nested... def flatten(nested):
try:
try:
nested + '' #如果nested = ['abc',1,2,3,4],那么nested+‘’ 可以执行吗?nested是列表,‘’是字符串, 两者怎么能进行+运算?这句话是怎么判断的?
except TypeError:pass
else: raise TypeError #这个else子句是在 nested+‘’ 这一句通过后执行的吗?它引发了一个 typeerror,这个error传递到哪里?
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested

就像nested = ['abc',1,3,4,'def'],求大神解答具体执行过程,多谢多谢!!

(我没有财富值,但是求帮忙……)
展开
 我来答
epower_1
推荐于2017-09-30
知道答主
回答量:9
采纳率:0%
帮助的人:9.2万
展开全部
def flatten(nested):
    try:
        try : nested + ' '
        except TypeError: pass
        else: raise TypeError
        for sublist in nested:
            for element in flatten(sublist):
                yield element
    except TypeError:
        yield nested

def flatten(l):  
    for el in l:  
        if hasattr(el, "__iter__") and not isinstance(el, str):  
            for sub in flatten(el):  
                yield sub  
        else:  
            yield el

这两段函数的功能相同。主要是为了展开嵌套列表等。

你的那两点主要是为了保证字符串不被展开。

比如说,你输入['abc',1,2]

不加那几句会变成'a','b','c',1,2

加了之后就是'abc',1,2

def flatten(nested):
    try:
        for sublist in nested:
            for element in flatten(sublist):
                yield element
    except:
        yield nested

你可以看看上面的这个函数跟最前面两个函数输出的区别。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式