4.6. Defining Functions(定义函数)
来源:互联网 发布:淘宝卖家返利网 编辑:程序博客网 时间:2024/06/04 23:59
我们可以定义一个函数求出任意范围的斐波那契数列:
>>> def fib(n): # write Fibonacci series up to n... """Print a Fibonacci series up to n."""... a, b = 0, 1... while a < n:... print a,... a, b = b, a+b...>>> # Now call the function we just defined:... fib(2000)0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
关键字 def 是一个函数定义的开头。它接下来必须要跟着函数名和参数列表。函数体从第二行开始 ,并且必须要有缩进。
函数体的第一行可以是一个可选的字符串;这个字符串会成为此函数的文档。存在能把文档字符串输出在网页或是打印出来的工具,或是在交互模式下通过某些命令来查看;在代码中写上文档字符串是个好习惯。
函数执行时首先把参数赋给该函数体的局部变量。说得再细点,函数中所有的变量都在局部符号表中存储。然而变量的引用首先看来在本地符号表中,然后再装入函数的局部符号表,最后再到内置的名称。这样,全局变量不能直接在函数中赋值(除非用 global 语句)。
当函数被调用时,函数参数会传入函数的本地变量中;这样,参数通过传递(值永远是对象的引用,而不是对象的值)。当一个函数调用另一个函数时,一个新的局部符号表被创建。
函数定义的名字在最近的符号表中。函数名称会被解释器识别为用户定义的函数。函数名可以赋给一个新的变量,这个新变量就可以当函数用。这里展示一个大众的重命名的机制:
>>> fib<function fib at 10042ed0>>>> f = fib>>> f(100)0 1 1 2 3 5 8 13 21 34 55 89用函数写一个返回斐波那契序列而不是直接打印这些数字的函数很简单:
>>> 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...>>> f100 = fib2(100) # call it>>> f100 # write the result[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
这个例子,揭示了一些Python的特性:
- return能在函数中返回值。函数体中没有return语句默认返回None。
- result.apped(a)语句调用list类的result对象的方法。方法是对象中的函数,被记为obj.methodname,obj是对象,methodname是方法名。不同的类定义不懂得方法。不同类的方法也许会有相同的名字,这不会引起冲突。(你也可以定义自己的类和方法,用class语句,参见Classes)append()方法就定义在list类里面;这个方法用来在序列尾部添加元素。在这个例子中它和 result = result + [a]等价,但是效率更高。
谁给我解释解释什么是 符号表(symbol table)?
0 0
- 4.6. Defining Functions(定义函数)
- Swift 函数的定义与调用(Defining and Calling Functions)
- Self-defining functions模式
- #595 – 定义事件处理函数的语法(Syntax Choices for Defining an Event Handler)
- [JavaScript] Defining and Invoking Functions
- B-样条基函数:定义 (B-spline Basis Functions: Definition)
- Defining Shapes 定义形状
- [JavaScript] Defining and invoking functions, Function Arguments
- C++ 函数(Functions)
- Swift 函数(Functions)
- swift之函数(functions)
- 正交函数(orthogonal functions)
- 激活函数(Activation Functions)
- 激活函数(Activation Functions)
- 即时函数(Immediate Functions)
- Displaying Graphics with OpenGL ES(二)——定义形状Defining Shapes
- #604 – 定义一个路由事件(Defining a New Routed Event)
- Defining Software Quality(软件质量的定义)
- 使用httpclient上传文件
- Mac 关闭 Mac SIP 安全设置
- 【Java语言】如何提高Java程序性能?
- C++的fill函数和memset函数
- 经典SQL练习题
- 4.6. Defining Functions(定义函数)
- HTTP状态码总结
- 正篇 三. 框架的选择
- JAVA学习【4】String类不可改变
- android程序内存泄漏的原因和解决办法
- 手工修改Tomcat的conf/server.xml需要删除并重新创建eclipse的server
- iOS下int long longlong的取值范围
- Ubuntu AC701 Build-in Self-test
- 学习笔记:百度Web开发工程师笔试题+新浪PHP工程师笔试题