python函数

2019-03-08  本文已影响0人  yunqing_71

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

注意如果命名关键字参数前边有可变参数的话,就不用加 *, 来声明命名关键字参数了。

关于以上两个参数的用法,请移步廖雪峰大大的网站去学习,我已经学过了,我写文章主要是为了自己学习,就不赘述了。

上一篇 下一篇

猜你喜欢

热点阅读