1.函数
要调用一个函数,需要知道函数的名称和参数。
可以查看Python标准库:https://docs.python.org/2/library/index.html,也可以在交互式命令行通过 help(abs) 查看函数的帮助信息。
s = area_of_circle(x) #圆的面积 s = abs(-1.5) #绝对值函数 cmp(x, y) #比较函数,如果x<y,返回-1,如果x=y,返回 0,如果 x>y,返回1 int(‘123‘) #把其他数据类型转换为整数,即123 str(123) #把其他类型转换成 str,即‘123‘
调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个:
>>> abs(1, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: abs() takes exactly one argument (2 given)
如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:
>>> abs(‘a‘) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: bad operand type for abs(): ‘str‘
2.编写函数
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。
#定义一个 square_of_sum函数,它接受一个list,返回list中每个元素平方的和 def square_of_sum(L): sum = 0 for num in L: sum+=num*num return sum print square_of_sum([1, 2, 3, 4, 5]) print square_of_sum([-5, 0, 5, 15, 25])
3.函数返回多值
Python的函数返回多值其实就是返回一个tuple。
# -*- coding: utf-8 -*- import math #import引用math包 def quadratic_equation(a, b, c): #计算一元二次方程的两个解。 deta = b*b-4*a*c if deta>=0: x1 = (-1*b+math.sqrt(deta))/(2*a) #平方根函数 x2 = (-1*b-math.sqrt(deta))/(2*a) return x1,x2 else: return print quadratic_equation(2, 3, 0) print quadratic_equation(1, -6, 5)
4.递归函数
def fact(n): #计算n的阶乘 if n==1: return 1 return n * fact(n - 1)
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
汉诺塔问题
我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:
1)如果a只有一个圆盘,可以直接移动到c;
2)如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
#-*- coding:utf-8 -*- def move(n, a, b, c): # move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到c柱子上面去 if n == 1: # 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归 print a, ‘-->‘, c return move(n-1, a, c, b) # 将n-1的盘子从a柱子上面移到b柱子上面去 print a, ‘-->‘, c # 输出最下面个盘子移从a移到c的路径 move(n-1, b, a, c) # 将b柱子上面的n-1个盘子移动到c柱子上面 move(4, ‘A‘, ‘B‘, ‘C‘)
5.默认参数
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
当定义默认参数后,函数调用既可以只传递默认参数,也可以传递所有参数。
def greet(name=‘world‘): print ‘Hello,‘,name,‘.‘ greet() #打印Hello, world . greet(‘Bart‘) #打印Hello, Bart .
6.定义可变参数
如果想让一个函数能接受任意个参数,则可定义一个可变参数。
def fn(*args): print args
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数。
这多个参数实际被组装成了一个tuple。
def average(*args): #计算平均值 if len(args)>0: sum=0 for num in args: sum+=num avg=float(sum)/len(args) return avg else: return 0.0 print average() print average(1, 2) print average(1, 2, 2, 3, 4)
原文地址:https://www.cnblogs.com/sapphire77/p/10697806.html