Python-函数小结
- 用户自定义.py文件
如果你已经把my_abs()
的函数定义保存为abstest.py
文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my_abs
来导入my_abs()
函数,注意 abstest
是文件名(不含.py
扩展名)
- 定义空函数 nop()
如果想定义一个什么事也不做的空函数,可以用pass
语句:
def nop():
pass
pass
语句什么都不做,那有什么用?实际上pass
可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
pass
还可以用在其他语句里,比如:
if age >= 18:
pass
缺少了pass
,代码运行就会有语法错误。
- 用户自定义检验参数类型
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
- 函数返回多个数值
def fun1(x): a=x**2 b=x**3 return a,b a,b=fun1(4) print(a,b)
- 可变参数
def variableArg(*num): sum=0 for n in num: sum=sum+n**2 return sum print(variableArg(1,2,3,4))
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*
号。在函数内部,参数numbers
接收到的是一个tuple,因此,函数代码完全不变
*nums
表示把nums
这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
这样,当我们调用power(5)
时,相当于调用power(5, 2)
设置默认参数时,有几点要注意: 一是必选参数在前,默认参数在后,否则Python的解释器会报错
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
- 可变参数
- 实例之求解一元二次方程的根
import math #输入三个参数,返回一元二次方程的解 def quadratic(a,b,c): delt=math.pow(b,2)-4*a*c delt1=math.sqrt(delt) if delt<0: print('该一元二次方程没有实根') return None elif delt==0: print('该一元二次方程只有一个实根') x1=x2=(-b/2*a) return x1,x2 else: print('该一元二次方程有两个实根') x1=(-b+delt1)/(2*a) x2=(-b-delt1)/(2*a) return x1,x2 print('请输入一元二次方程的三个系数a,b,c:') a=float(input('请输入a:')) b=float(input('请输入b:')) c=float(input('请输入c:')) x1,x2=quadratic(a,b,c) print('该一元二次方程的解析式为:{0}x^2+{1}x+{2}=0'.format(a,b,c)) print('该一元二次方程的解x1={0:.3f},x2={1:.3f}'.format(x1,x2))
- 求一个list的最大值与最小值,以tuple形式返回
#迭代查找一个list(随机数生成一个list)的最大值与最小值,并返回一个tuple import random def getRandomList(): ranList=[] for i in range(10): ranList.append(random.choice(range(101))) print('生成的随机list为',ranList) return ranList def find_min_max(ranList): minNums=maxNums=ranList[0] for x in ranList: if x<minNums: minNums=x maxNums=max(ranList) return (minNums,maxNums) #dict={'max':maxNums,'min':minNums} print(find_min_max(getRandomList()))