-
定义函数
def fib2(n): # return Fibonacci series up to n """Return a list containing the Fibonacci series up to n.""" result = [] a, b = 0, 1 while a < n: result.append(a) # see below a, b = b, a+b return result
~
- return 语句会从函数内部返回一个值
- result.append(a) 语句调用了列表对象 result 的 方法 。方法是“属于”一个对象的函数
-
函数定义的更多形式
argument – 参数 在调用函数时传给 function (或 method )的值。参数分为两种: 关键字参数: 在函数调用中前面带有标识符(例如 name=)或者作为包含在前面带有 ** 的字典里的值传入。举例来说,3 和 5 在以下对 complex() 的调用中均属于关键字参数: complex(real=3, imag=5) complex(**{‘real’: 3, ‘imag’: 5}) 位置参数: 不属于关键字参数的参数。位置参数可出现于参数列表的开头以及/或者作为前面带有 * 的 iterable 里的元素被传入。举例来说,3 和 5 在以下调用中均属于位置参数: complex(3, 5) complex(*(3, 5))
-
参数默认值 最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用
def ask_ok(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder)
~
ask('Do you really want quit?')
in 关键字。它可以测试一个序列是否包含某个值。 重要警告: 默认值只会执行一次。这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要。比如,下面的函数会存储在后续调用中传递给它的参数: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
~
-
关键字参数 在函数调用中,关键字参数必须跟随在位置参数的后面。
当存在一个形式为 **name 的最后一个形参时,它会接收一个字典 (参见 映射类型 — dict),其中包含除了与已有形参相对应的关键字参数以外的所有关键字参数。 这可以与一个形式为 *name,接收一个包含除了与已有形参列表以外的位置参数的 元组 的形参 (将在下一小节介绍) 组合使用 (*name 必须出现在 **name 之前。) 例如,如果我们这样定义一个函数:
def cheeseshop(kind, *arguments, **keywords): print("-- Do you have any", kind, "?") print("-- I'm sorry, we're all out of", kind) for arg in arguments: print(arg) print("-" * 40) for kw in keywords: print(kw, ":", keywords[kw])
~ 它可以像这样调用:
cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch")
` 当然它会打印:
– Do you have any Limburger ? – I’m sorry, we’re all out of Limburger It’s very runny, sir.
It’s really very, VERY runny, sir. shopkeeper : Michael Palin client : John Cleese sketch : Cheese Shop Sketch
-