函数
一, 函数的创建
简单格式
def function_name(参数表):
函数体
return
如果没有写 return, 函数会默认返回一个 none
二, 函数的参数
必需参数:
调用函数时必需参数须以正确的顺序传入, 调用的数量必须和声明时的一样.
- def func1(name,age):
- print('my name is %s,i am %d years old'%(name,age))
- func1('smilepup',20)
- # 输出 my name is smilepup,i am 20 years old
关键字参数:
使用关键字参数允许函数调用时参数的顺序与声明时不一致, 因为 Python 解释器能够用参数名匹配参数值.
- def func1(name,age):
- print('my name is %s,i am %d years old'%(name,age))
- #func1(20,'smilepup')# 报错
- func1(age = 20,name = 'smilepup')
缺省参数(默认参数):
调用函数时, 缺省参数的值如果没有传入, 则被认为是默认值, 如果输入了缺省参数了, 则传入输入的参数.
- def print_info(name, age, gender='male'):
- print('Name:%s' % name)
- print('age:%s' % age)
- print('Sex:%s' % sex)
- return
- print_info('smilepup', 20)#gender 为 male
- print_info('puppy', 2, 'female')#gender 为 female
不定长参数
当需要一个函数能处理比当初声明时更多的参数. 这些参数叫做不定长参数, 声明时不会命名.
- def func1(*args):
- print(args)
- return
- func1(1,2,3,4)
- # 输出(1, 2, 3, 4)
args 中的数据用元组保存.
用 ** 的变量名可以存放命名的变量参数
- def func1(**args):
- print(args)
- return
- func1(name = 'smilepup',age = 20,gender = 'male')
- # 输出{'name': 'smilepup', 'age': 20, 'gender': 'male'}
而这种则用字典保存数据.
当函数需要传入不同类型的变量时, 要注意顺序必需参数, 默认参数, 带一个星号的不定长参数, 带两个星号的不定长参数的顺序定义形参, 否则会报错.
三, 作用域
L:local, 局部作用域, 即函数中定义的变量;
E:enclosing, 嵌套的父级函数的局部作用域, 即包含此函数的上级函数的局部作用域, 但不是全局的;
G:globa, 全局变量, 就是模块级别定义的变量;
B:built-in, 系统固定模块里面的变量, 比如 int, bytearray 等.
搜索变量的优先级顺序依次是: 作用域局部>外层作用域>当前模块中的全局 > python 内置作用域
global 关键字
当内部作用域想修改外部作用域的变量时, 就要用到 global 和 nonlocal 关键字了, 当修改的变量是在全局作用域 (global 作用域) 上的, 就要使用 global 先声明一下
- count = 10
- def outer():
- global count
- print(count)
- count = 100
- print(count)
- outer()
- #10
- #100
四, 递归函数
定义: 在函数内部, 可以调用其他函数. 如果一个函数在内部调用自身本身, 这个函数就是递归函数.
斐波那契数列
- def fibo(n):
- before = 0
- after = 1
- for i in range(n - 1):
- ret = before + after
- before = after
- after = ret
- return ret
来源: http://www.bubuko.com/infodetail-2788183.html