Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
1. for - else
什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的。十大装B语法,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. 一颗星(*)和两颗星(**)
有没有发现,星(*)真是一个神奇的符号!想一想,没有它,C语言还有啥好玩的?同样,因为有它,Python 才会如此的仪态万方、风姿绰约、楚楚动人!Python 函数支持默认参数和可变参数,一颗星表示不限数量的单值参数,两颗星表示不限数量的键值对参数。
我们还是举例说明吧:设计一个函数,返回多个输入数值的和。我们固然可以把这些输入数值做成一个list传给函数,但这个方法,远没有使用一颗星的可变参数来得优雅:
>>> def multi_sum(*args): s = 0 for item in args: s += item return s >>> 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
3. 三元表达式
熟悉 C/C++ 的程序员,初上手 python 时,一定会怀念经典的三元操作符,因为想表达同样的思想,用python 写起来似乎更麻烦。比如:
>>> y = 5 >>> if y < 0: print('y是一个负数') else: print('y是一个非负数') y是一个非负数