第6章 函数
1.懒惰是一种美德(代码重用)
2.抽象和结构
抽象可节省人力,更容易被人理解。
抽象隐藏具体细节。
3.自定义函数
函数执行操作并返回一个值。
使用def (define的缩写) 定义函数
def hello(name):
return'Hello, ' + name + '!'
在def 下面添加字符串就是给函数添加文档字符串。
def square(x):
'Calculates the square of the number x.'
return x*x;
访问文档: 使用 square.__doc__
获取函数相关信息:help()
没有返回值的函数:不包含return,或return后面是空的。
4.参数
给函数传递一个数,在函数内无法改变这个数的值
参数为可变的数据结构(如列表)将改变
#和C语言的函数参数类似。
#可以借助列表修改参数
调用参数时指定参数名称如:
hello_1(greeting='Hello', name='world')
指定名称的参数叫 关键字参数
定义关键字参数函数时,可以提供默认值
收集参数:*params *会收集多余的参数,不会收集关键字参数 得到序列
** 可收集关键字参数 得到字典
分配参数:
*
**
在调用函数时 将分配参数
5.作用域
此处作用域的概念类似C语言。
使用函数globals来访问全局变量,它返回一个包含全局变量的字典
重新关联全局变量(在函数内部给全局变量赋值)
通过 global 变量名 ,使用全局变量。
函数内可嵌套定义
#C语言不允许嵌套定义函数
作用域也将嵌套,内部函数可访问外部的局部作用域
#nonlocal 类似global 给外部作用域内变量赋值
6.递归
调用自身
#与C语言类似
以阶乘为例:
def fac(n):
if n == 1:
return 1
else
return n * fac(n - 1)