python:参数与Lambda表达式
参数类型
位置参数
def location(a, b)
print(a + b)
location(3, 9)
"调用函数时,按顺序传递参数,3 传给 a,9 传给 b"
关键字参数
def location(a, b)
print(a + b)
location(b = 3, a = 9)
"调用函数时,按关键字传递参数,3 传给 b,9 传给 a"
默认参数
# 正确的默认参数定义方式--> 位置参数在前,默认参数在后
def print_hello(name, sex=1):
....
# 错误的定义方式
def print_hello(sex=1, name):
....
# 调用时不传sex的值,则使用默认值1
print_hello('tanggu')
# 调用时传入sex的值,并指定为2
print_hello('tanggu', 2)
可变参数
一般在给多值参数命名时,习惯使用以下两个名字
*args — 存放 元组 参数
**kwargs — 存放 字典 参数,(kw 即 keyword,kwargs 即 键值对参数)
def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
输出:
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'gender': True}
拆包
拆包主要用于元组和字典参数的传递。
def demo(*args, **kwargs):
print(args)
print(kwargs)
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}
"变量名前必须要加 * 号,否则不能无法正常拆包"
"错误演示(不加 * 号):"
demo(gl_nums, gl_xiaoming)
输出:
((1, 2, 3), {'name': '小明', 'age': 18})
{}
"正确演示(加 * 号):"
demo(*gl_nums, **gl_xiaoming)
输出:
(1, 2, 3)
{'name': '小明', 'age': 18}
高级函数用法
filter()
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,可以通过list()转化为列表或者通过for循环取值。
filter()函数接收两个参数,第一个为函数,第二个为可迭代对象。返回序列中能使函数为真的元素的迭代器对象;如果函数为None,则返回序列中值为True的元素。
res = filter(lambda x: x.startswith('a'), ['abc', 'adsa', 'Def', 'Abd', ])
print(list(res)) # ['abc', 'adsa']
map()
map(function, iterable, …),将function应用于iterable的每一个元素,结果以列表的形式返回
>>> print map(lambda x: x % 2, range(7))
[0, 1, 0, 1, 0, 1, 0]