您的位置:首页 > 编程语言 > Python开发

Python开发学习笔记(8) - Python 函数

2016-11-14 15:29 232 查看
Python 中的内置函数有很多:

https://docs.python.org/2/library/functions.html#sum

Python函数返回值

关于Python函数返回值,python函数返回值只有单一值,而返回的“多值”,实际上只是一种假象,因为python函数返回的多值是一个元祖 tuple,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个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时需要特殊处理

# 用fact(n)用递归函数表示为:

def fact(n):

  if n==1:

    return 1

  return n * fact(n - 1)

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

函数的默认参数

函数的默认参数作用是简化调用,在使用默认参数的情况下,可以只把必须的参数传进去,而不需要传默认的参数。 同时也可以传入额外的参数来覆盖默认参数值。

例如Python自带的 int()函数,其实有两个参数值,我们既可以传入一个参数,又可以传入两个参数,int()函数的第二个参数是转换进制,如果不传,默认是十进制(base = 10), 如果传了,就用传入的参数。由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面

int(‘123’)

结果: 123

int(‘123’, 8)

结果: 83

定义带默认参数的函数:

# 定义一个 greet() 函数,它包含一个默认参数,如果没有传入,打印 ‘Hello, world.’,如果传入,打印 ‘Hello, xxx.’

def greet(name = ‘world’):

  print ‘hello,’,name +’.’

  

greet()

greet(‘Chris’)

结果:hello, world.

   hello, Chris.

函数可变的参数

如果想让一个函数能接受任意个参数,可以定义一个可变参数:

def fn(*args):

    print args

 >>> fn()

 ()

 >>> fn(‘a’)

 (‘a’,)

 >>> fn(‘a’,’b’)

 (‘a’,’b’)

关于可变参数,Python解析器会把传入的一组参数组装成一个tuple(元祖)传递给可变参数,因此,在函数内部,可以直接把变量args 看成一个tuple。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 函数