python基础学习五 : 函数基础

#Python内置了很多有用的函数,我们可以直接调用。
#abs求绝对值
abs(-100#cmp比较两个数
#而比较函数 cmp(x, y) 就需要两个参数,
#如果 x<y,返回 -1,
#如果 x==y,返回 0,
#如果 x>y,返回 1:
cmp(1,2)

#int取整
int(12.23)
>>>结果是12

#str函数把其他类型转换为string
str(123)
>>>'123'

'''
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
'''
def my_abs(x):
    if x>=0:
        return x
    else:
        return -x
#如果没有return语句,函数执行完毕后也会返回结果,
#只是结果为 None。
#return None可以简写为return。

import math #用到sin和cos

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

#可以产生如下结果
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0

#但其实这只是一种假象,Python函数返回的仍然是单一值>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)
#用print打印返回结果,原来返回值是一个tuple!
'''
但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
'''

#递归函数
#在函数内部,可以调用其他函数。如果一个函数在内部调#用自身本身,这个函数就是递归函数。
'''
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:
fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
'''

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

'''
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。
'''

#定义默认参数
'''
例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:

>>> int('123')
123
>>> int('123', 8)
83
int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。

可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
'''  
def power(x, n=2):#设置默认为2
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

#定义可变参数:

#如果想让一个函数能接受任意个参数,
#我们就可以定义一个可变参数:
def fn(*args):
    print args

#可变参数的名字前面有个 * 号,我们可以传入0个、1个或#多个参数给可变参数

'''
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
'''

#定义可变参数的目的也是为了简化调用。假设我们要计算#任意个数的平均值,就可以定义一个可变参数:

def average(*args):
    ...

#可以直接调用
>>> average()
0
>>> average(1, 2)
1.5
>>> average(1, 2, 2, 3, 4)
2.4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值