Skip to content

Commit b28815d

Browse files
committed
7.6小节完成
1 parent ee6e9d0 commit b28815d

File tree

3 files changed

+59
-4
lines changed

3 files changed

+59
-4
lines changed

cookbook/c07/p05_default_argument.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,9 @@ def spam(a, b=42):
1111
spam(1) # Ok. a=1, b=42
1212
spam(1, 2) # Ok. a=1, b=2
1313

14+
_no_value = object()
15+
16+
def spam(a, b=_no_value):
17+
if b is _no_value:
18+
print('No b value supplied')
19+

cookbook/c07/p06_anony_func.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
"""
4+
Topic: 匿名函数lambda表达式
5+
Desc :
6+
"""
7+
8+
add = lambda x, y: x + y
9+
print(add(2,3))
Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,58 @@
11
============================
2-
7.6 定义内联的匿名函数
2+
7.6 定义匿名或内联函数
33
============================
44

55
----------
66
问题
77
----------
8-
todo...
8+
你想为 ``sort()`` 操作创建一个很短的回调函数,但又不想用 ``def`` 去写一个单行函数,
9+
而是希望通过某个快捷方式以内联方式来创建这个函数。
10+
11+
|
912
1013
----------
1114
解决方案
1215
----------
13-
todo...
16+
当一些函数很简单,仅仅只是计算一个表达式的值的时候,就可以使用lambda表达式来代替了。比如:
17+
18+
.. code-block:: python
19+
20+
>>> add = lambda x, y: x + y
21+
>>> add(2,3)
22+
5
23+
>>> add('hello', 'world')
24+
'helloworld'
25+
>>>
26+
27+
这里使用的lambda表达式跟下面的效果是一样的:
28+
29+
.. code-block:: python
30+
31+
>>> def add(x, y):
32+
... return x + y
33+
...
34+
>>> add(2,3)
35+
5
36+
>>>
37+
lambda表达式典型的使用场景是排序或数据reduce等:
38+
39+
.. code-block:: python
40+
41+
>>> names = ['David Beazley', 'Brian Jones',
42+
... 'Raymond Hettinger', 'Ned Batchelder']
43+
>>> sorted(names, key=lambda name: name.split()[-1].lower())
44+
['Ned Batchelder', 'David Beazley', 'Raymond Hettinger', 'Brian Jones']
45+
>>>
46+
47+
|
1448
1549
----------
1650
讨论
1751
----------
18-
todo...
52+
尽管lambda表达式允许你定义简单函数,但是它的使用是有限制的。
53+
你只能指定单个表达式,它的值就是最后的返回值。也就是说不能包含其他的语言特性了,
54+
包括多个语句、条件表达式、迭代以及异常处理等等。
55+
56+
你可以不使用lambda表达式就能编写大部分python代码。
57+
但是,当有人编写大量计算表达式值的短小函数或者需要用户提供回调函数的程序的时候,
58+
你就会看到lambda表达式的身影了。

0 commit comments

Comments
 (0)