1. 程式人生 > 實用技巧 >python十大易錯語法

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