python函数
python内置了很多函数,可供我们直接调用:
例如:
abs(-20)求绝对值
max(1,2,3)找出最大值
int('123')类型转换函数
float('12.11')
str(111)
bool(1) True
bool('') False
函数名就是指向一个函数对象的引用,完全可以把一个函数名赋给一个变量。
a=abs
a(-20)
输出20
定义一个函数:
在python中,我们用def定义一个函数,例如:
def name(a, b):
if a < b:
print(b)
elif a == b:
print(a, '=', b)
else:
print(a)
name(5, 1) # 调用name()函数
如果定义一个空函数,什么也不做,可以用pass作为函数体
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
def name():
pass
返回多个值
函数可以返回多个值吗?答案是肯定的。
比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
import math语句表示导入math包,并允许后续代码引用math包里的sin、cos等函数。
然后,我们就可以同时获得返回值:
x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
151.96152422706632 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:
r = move(100, 100, 60, math.pi / 6)
print(r)
(151.96152422706632, 70.0)
原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
、
python函数的参数
例如:我们求x2,很容易,但如果是x3,x4...甚至xn呢?
这就需要我们考虑一下,是不是把n也写成一个参数呢?
def name(x, n):
s = 1
while n > 0:
s = s * x
n = n - 1
print(s)
name(5, 4)
另外我要说的是:python中允许有默认参数存在,只需要在参数中标明即可,例如上边的我想默认求x^2
def name(x, n=2): # 默认参数n=2
s = 1
while n > 0:
s = s * x
n = n - 1
print(s)
name(5, 4)
name(5) # 默认参数n=2,所以我只输入一个参数的时候就是求x^2
从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);
二是如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
定义默认参数要牢记一点:默认参数必须指向不变对象!
可变参数
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。
要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
但是调用的时候,需要先组装出一个list或tuple:
calc([1, 2, 3])
14
calc((1, 3, 5, 7))
84
如果利用可变参数,调用函数的方式可以简化成这样:
calc(1, 2, 3)
14
calc(1, 3, 5, 7)
84
所以,我们把函数的参数改为可变参数:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:
calc(1, 2)
5
calc()
0
如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:
nums = [1, 2, 3]
calc(nums[0], nums[1], nums[2])
14
这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
nums = [1, 2, 3]
calc(*nums)
14
*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
关键字参数
def person(name,age,**kw):
# 声明一个关键字参数,**kw可以传0或多个,调用方式如下:
person('yunqing',25,gender='M',city='tianjin')
命名关键字参数
def person(name,age,*,city,job):
#或者为了调用方便
def person(name,age,*,city='TJ',job)
这样调用时候可以不输入city
注意如果命名关键字参数前边有可变参数的话,就不用加 *, 来声明命名关键字参数了。
关于以上两个参数的用法,请移步廖雪峰大大的网站去学习,我已经学过了,我写文章主要是为了自己学习,就不赘述了。