首页 > 代码库 > Python-功能函数的使用(二)
Python-功能函数的使用(二)
使用可选参数定义函数
可选参数可以通过分配(用定义=
)的默认值的参数名:
def make(action=‘nothing‘): return action
可以通过3种不同的方式调用此函数:
make("fun") # Out: fun make(action="sleep") # Out: sleep # The argument is optional so the function will use the default value if the argument is # not passed in. make() # Out: nothing
警告
可变类型(list
,dict
,set
等),应小心时,给出被视为默认属性。默认参数的任何突变将永久更改。
Lambda(内联/匿名)函数
该lambda
关键字创建一个包含一个表达式的内联函数。
考虑功能:
def greeting(): return "Hello"
其中,当称为:
print(greeting())
打印:
Hello
lambda
s也可以接受参数:
strip_and_upper_case = lambda s: s.strip().upper() strip_and_upper_case(" Hello ")
返回字符串:
HELLO
他们甚至可以采取任意数量的参数/关键字参数,如正常功能。
greeting = lambda x, *args, **kwargs: print(x, args, kwargs) greeting(‘hello‘, ‘world‘, world=‘world‘)
打印:
hello (‘world‘,) {‘world‘: ‘world‘}
最常见的用例lambda
s为那些只在一个地方使用简短的函数。例如,此行排列一个字符串列表,忽略它们的大小写,并在开头和结尾忽略空格:
它们最常用于sorted
,filter
和map
sorted( [" foo ", " BAR", "BaZ ", "qux"], key=lambda s: s.strip().upper())
返回:
[‘ BAR‘, ‘BaZ ‘, ‘ foo ‘, ‘qux‘]
==================================================== =========
sorted([" foo ", " BAR", "BaZ ", "qux"], key=lambda s: s.strip())
返回:
[‘ BAR‘, ‘BaZ ‘, ‘ foo ‘, ‘qux‘] # no effect of lambda, list is sorted
sorted([" foo ", " BAR", "BaZ ", "qux"])
返回:
[‘ BAR‘, ‘BaZ ‘, ‘ foo ‘, ‘qux‘] # list sorted.
sorted( map(lambda s: s.strip().upper(), [" foo ", " BAR", "BaZ ", "qux"]))
返回:
[‘BAR‘, ‘BAZ‘, ‘FOO‘, ‘QUX‘] # what expected
是第一个成语错了吗?你能解释一下这个。
==================================================== =====================
my_list = [3, -4, -2, 5, 1, 7] sorted(my_list, key=lambda x: abs(x))
返回:
[1, -2, 3, -4, 5, 7]
list(filter(lambda x: x>0, my_list)
返回:
[3, 5, 1, 7]
list(map(lambda x: abs(x), my_list)
返回:
[3, 4, 2, 5, 1, 7]
可以从lambda函数内部调用其他函数(带/不带参数)。
def foo(msg): print(msg) greet = lambda x = "hello world": foo(x) greet()
打印:
hello world
因为这是非常有用的lambda
可以仅含有一个表达,并通过使用一个附属功能的一个可以运行多个语句。
注意
记住,PEP-8 (官方Python风格指南)不建议lambda表达式分配给变量(如在第一两个例子):
始终使用def语句,而不是将lambda表达式直接绑定到标识符的赋值语句。
是:
def f(x): return 2*x
没有:
f = lambda x: 2*x
第一种形式是指所得到的函数的对象的名称是特别f
,而不是通用的<lambda>
。这对于一般的跟踪和字符串表示更有用。使用赋值语句消除的唯一好处在一个lambda表达式可以提供一个明确的def
声明(即它可以嵌入一个更大的表达式中)。
Python-功能函数的使用(二)