python十大易错语法

1. for - else

不是 if 和 else 才是原配吗?for 和 else 也是一对,而且是合法的。

for i in [1,2,3,4]:
    print(i)
else:
    print(i, '我是else')

结果:

1
2
3
4
4 我是else

如果在 for 和 else 之间(循环体内)有第三者 if 插足,也不会影响 for 和 else 的关系。因为 for 的级别比 if 高,else 又是一个攀附权贵的家伙,根本不在乎是否有 if,以及是否执行了满足 if 条件的语句。else 的眼里只有 for,只要 for 顺利执行完毕,else 就会屁颠儿屁颠儿地跑一遍:

for i in [1,2,3,4]:
    if i > 2:
        print(i)
else:
    print(i, '我是else')

结果:

3
4
4 我是else

那么,如何拆散 for 和 else 这对冤家呢?只有当 for 循环被 break 语句中断之后,才会跳过 else 语句:

for i in [1,2,3,4]:
    if i > 2:
        print(i)
        break
else:
    print(i, '我是else')

结果:

3

2. 一颗星(*)和两颗星(**)

Python 函数支持默认参数和可变参数,一颗星表示不限数量的单值参数,两颗星表示不限数量的键值对参数。

举例说明:
设计一个函数,返回多个输入数值的和。我们固然可以把这些输入数值做成一个list传给函数,但这个方法,远没有使用一颗星的可变参数来得优雅:

def multi_sum(*args):
    s = 0
    for item in args:
        s += item
    return s

print(multi_sum(3,4,5))

结果:

12

Python 函数允许同时全部或部分使用固定参数、默认参数、单值(一颗星)可变参数、键值对(两颗星)可变参数,使用时必须按照前述顺序书写。

def do_something(name, age, gender='男', *args, **kwds):
    print('姓名:%s,年龄:%d,性别:%s'%(name, age, gender))
    print(args)
    print(kwds)

do_something('xufive', 50, '男', 175, 75, math=99, english=90)

结果:

姓名:xufive,年龄:50,性别:男
(175, 75)
{'math': 99, 'english': 90}

此外,一颗星和两颗星还可用于列表、元组、字典的解包,看起来更像C语言:

>>> a = (1,2,3)
>>> print(a)
(1, 2, 3)
>>> print(*a)
1 2 3

>>> b = [1,2,3]
>>> print(b)
[1, 2, 3]
>>> print(*b)
1 2 3

>>> c = {'name':'xufive', 'age':51}
>>> print(c)
{'name': 'xufive', 'age': 51}
>>> print(*c)
name age

>>> print('name:{name}, age:{age}'.format(**c))
name:xufive, age:51

https://blog.csdn.net/xufive/article/details/102856921

原文地址:https://www.cnblogs.com/id88/p/14210868.html