python基础学习五 : 函数基础
2016-02-17 18:25
519 查看
#Python内置了很多有用的函数,我们可以直接调用。 #abs求绝对值 abs(-100) #cmp比较两个数 #而比较函数 cmp(x, y) 就需要两个参数, #如果 x<y,返回 -1, #如果 x==y,返回 0, #如果 x>y,返回 1: cmp(1,2) #int取整 int(12.23) >>>结果是12 #str函数把其他类型转换为string str(123) >>>'123' ''' 在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。 ''' def my_abs(x): if x>=0: return x else: return -x #如果没有return语句,函数执行完毕后也会返回结果, #只是结果为 None。 #return None可以简写为return。 import math #用到sin和cos def move(x,y,step,angle): nx=x+step*math.cos(angle) ny=y-step*math.sin(angle) return nx,ny #可以产生如下结果 >>> x, y = move(100, 100, 60, math.pi / 6) >>> print x, y 151.961524227 70.0 #但其实这只是一种假象,Python函数返回的仍然是单一值>>> r = move(100, 100, 60, math.pi / 6) >>> print r (151.96152422706632, 70.0) #用print打印返回结果,原来返回值是一个tuple! ''' 但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。 ''' #递归函数 #在函数内部,可以调用其他函数。如果一个函数在内部调#用自身本身,这个函数就是递归函数。 ''' 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出: fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n 所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。 ''' def fact(n): if n==1: return 1 return n * fact(n - 1) ''' 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。 ''' #定义默认参数 ''' 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 >>> int('123', 8) 83 int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。 可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的 def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s ''' def power(x, n=2):#设置默认为2 s = 1 while n > 0: n = n - 1 s = s * x return s #定义可变参数: #如果想让一个函数能接受任意个参数, #我们就可以定义一个可变参数: def fn(*args): print args #可变参数的名字前面有个 * 号,我们可以传入0个、1个或#多个参数给可变参数 ''' 可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。 ''' #定义可变参数的目的也是为了简化调用。假设我们要计算#任意个数的平均值,就可以定义一个可变参数: def average(*args): ... #可以直接调用 >>> average() 0 >>> average(1, 2) 1.5 >>> average(1, 2, 2, 3, 4) 2.4
相关文章推荐
- python基础学习四 : Dict和Set类型
- 《Python学习手册》(四)
- python RE的match()和group()疑问
- 【详解】Python专题开发
- python 字符串数组互转
- Python 中的全局变量
- 【python笔记 三 】python脚本实战---数字密码小游戏
- 【python笔记 二 】python语句
- 【python笔记 一 】变量及运算符
- Python基础学习三 条件判断和循环
- 一句Python命令启动一个Web服务器
- python笔记--廖雪峰站学习笔记(二)
- python 基础 特殊符号的使用
- Learn Python the Hard Way Ex41记录
- The Story of self Parameter in Python, Demystified
- python编程常用模板总结
- python基础学习二 list和tuple(列表和元组)
- 用Python爬虫爬取豆瓣电影、读书Top250并排序
- Python字符编码
- python学习