Python3 函数笔记
Python3 函数笔记
默认值在函数定义作用域被解析,如下所示:
>>> i =5
>>> def f(arg=i):
... print(arg)
...
>>> i=6
>>> f()
5
默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的参数:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
这将输出:
[1]
[1, 2]
[1, 2, 3]
如果你不想让默认值在后续调用中累积,你可以像下面一样定义函数:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
#默认参数与关键字参数差异
def f(a, L='123',c='name'):
pass
#默认参数按顺序传值
f(1,'123','456')
#关键字参数可以不按顺序
f(1,c='names')
‘‘‘ **name接受一个字典,包含了形参列表中未出现的所有关键字参数 *name接收一个元组,包含形参列表未出现的参数值,*name必须用在**name前‘‘‘
def cheeseshop(kind, *arguments, **keywords):
pass
#当你要传递的参数是是一个列表,但要调用的是一个个的值时,用 * 可以拆分列表
>>> list(range(3, 6))
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args))
[3, 4, 5]
#同样的 ** 可以拆分字典为一个个键对值
>>> def parrot(voltage, state='a stiff', action='voom'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.", end=' ')
... print("E's", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
#匿名函数lambda做嵌套函数定义
# -*- coding: utf-8 -*-
def make(n):
return lambda x:x+n
f=make(42)
print(f)
print(f(1))
#输出
<function make.<locals>.<lambda> at 0x10d954e18>
43
#匿名函数lambda做参数
>>> pairs = [(1, 'one'),(2, 'two'),(3, 'three'),(4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'),(1, 'one'),(3, 'three'),(2, 'two')]
#list.sort()做列表排序
list.sort(cmp=None, key=None, reverse=False)
‘‘‘
cmp -- 可选参数,如果指定了该参数会使用该参数的(函数)方法进行排序。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
‘‘‘