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。
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高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>
- Python函数学习笔记
- Python 学习笔记(一)语句,变量,函数
- python学习笔记--探索函数
- Python3.3 学习笔记4 - 函数 - 内置和其他一些函数
- Python Web 开发 学习笔记1 安装配置 python+django
- python函数缺省值与引用学习笔记分享
- 学习python笔记——函数
- python学习笔记三----windows下开发环境
- Python3.3 学习笔记4 - 函数 - input & print
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- python_模块与函数学习笔记
- 嵌入式开发之C基础学习笔记05--模块化设计和函数的使用
- Python学习笔记(函数)
- Python学习笔记(5):函数
- Python学习笔记总结(二):函数和模块
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- Python3.3 学习笔记4 - 函数 - lambda
- python学习笔记8-函数整理
- python学习笔记17-常用函数总结整理