Python学习(二)—— 函数

一、内建函数

Python内置了很多有用的函数,我们可以直接调用。

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:http://docs.python.org/3/library/functions.html#abs

函数含义例子
abs()求绝对值abs(-100) -> 100、abs(12.34) -> 12.34
max()求最大值max(-1,3,-5,6) -> 6

int()

float()

str()

bool()

数据类型转换

int('123') -> 123、int(12.34) -> 12

float('12.34') -> 12.34

str(1.23) -> '1.23'、str(100) -> ‘100’

bool(1) -> true、bool('') -> False

二、定义函数

1.函数的定义

形式例子

def 函数命(参数):

    <执行>    

    return 返回值

def my_abs(x):

    if x >= 0:

        return x

    else:

        return -x

2.空函数

def nop():
    pass

3.参数的检查:isinstance(参数,  (变量类型1,变量类型2,...) )

def my_abs(x):
    if not isinstance(x,(int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x 

4.返回多个值

函数可以返回多个值,比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:

import math
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y + ste[ * math.sin(angle)
    return nx,ny

>>> x,y = move(100, 100, 60, math.pi/6)
>>> print(x, y)
>>> 151.96152422706632 70.0

实际上,函数返回的仍然是单一值——tuple。在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置覆给对应的值,所以Python的函数返回多值其实就是返回一个tuple。

三、函数的参数

1.可变参数:顾名思义,就是传入的参数个数是可变的

我们以数学题为例子,给定一组数字a,b,c......,请计算a^2 + b^2 + c^2 + ......

要定义出这个函数,我们必须确定传入的参数。由于参数个数不确定,我们首先想到可以把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

所以,我们把函数的参数改为可变参数:

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,要调用一个可变参数,可以在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。

2.关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个参数名的参数,这些关键字参数在函数内部自动组装为一个dict:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

函数person除了必选参数name和age外,还接受关键字参数kw。在调用函数时,可以只传入必选参数:

>>> person('Michael',30)
name:Michael age:30 other:{}

也可以传入任意个数的关键字参数:

>>> person('Bob', 35, city='Beijing')
name:Bob age:35 other:{'city':'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name:Adam age:45 other:{'gender':'M', 'job':'Engineer'}

 与可变参数一样,也可以将一个dict转换为关键字参数传入函数:

>>> extra = {'city':'Beijing', 'job':'Engineer'}
>>> person('Jack', 24, **extra)
name:Jack age:24 other:{'city':'Beijing', 'job':'Enginer'}

3.命名关键字参数

对于关键字惨,函数的调用者可以传入任意不受限制的关键字参数。如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接受city和job作为关键字参数。这种方式定义的函数如下:

def person(name, age, *, city, job):
    print(name, age, city, job)

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数,调用如下:

>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值