参考视频:零基础入门学Python (作者:小甲鱼)
函数
创建函数 def XXX():
调用函数 XXX()
>>> def MyFirstFunction():
print('第一个函数fmm')
print('fmm加油')
print('mm我想你')
>>> MyFirstFunction()
第一个函数fmm
fmm加油
mm我想你
>>>
调用一个未定义的函数会报错
为了使函数每次的使用都有区别,加入了参数的概念,使得函数个性化
>>> def MySecondFunction(name):
print(name+'我想你')
>>> MySecondFunction('mm')
mm我想你
>>>
多个参数之间用逗号隔开,没有个数限制,但是不宜太多,三四个即可
函数的返回值:return
形式参数:定义时候
实际参数:传递时候
函数文档:相当于注释 不打印 与注释也有区别
>>> def MyFirstFunction1():
'函数文档'
#注释
print('第一个函数fmm')
print('fmm加油')
print('mm我想你')
>>> MyFirstFunction1()
第一个函数fmm
fmm加油
mm我想你
>>> MyFirstFunction1.__doc__
'函数文档'
>>> print.__doc__
"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\nPrints the values to a stream, or to sys.stdout by default.\nOptional keyword arguments:\nfile: a file-like object (stream); defaults to the current sys.stdout.\nsep: string inserted between values, default a space.\nend: string appended after the last value, default a newline.\nflush: whether to forcibly flush the stream."
>>> help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
>>>
注意 doc左右是分别有两个_
关键字参数:
用关键字索引参数 而不是用顺序 这样以免参数多的时候传错
默认参数:定义了默认值的参数
收集参数:可变参数 搞不清到底需要多少参数的时候
>>> def test(*params):
print('参数的长度',len(params));
>>> test(1,2,3,1)
参数的长度 4
>>>
当收集参数后面还有定制参数的时候,需要使用关键字参数给出,或者将定制参数给出默认参数
函数与过程
过程没有返回值
Python严格来说 只有函数没有过程
函数没有返回值的时候会返回none
Python没有类型 可以返回多个值 即返回一个列表 【,,,,】或者元组(,,,)
作用域
局部变量:函数里的参数 局部生效 利用栈存储 函数执行完就自动删除 栈清空
全局变量:函数外的参数 作用域为整个模块
在函数内试图修改全局变量的话,Python会自动创建一个新的局部变量代替,在函数内就是一个局部变量,和全局变量互不影响
所以在函数内建议访问全局变量,不要改变
内嵌函数和闭包
global关键字 在函数内修改全局变量
内嵌函数:函数里定义函数
闭包:例如下面的Fy
>>> def Fx(x):
def Fy(y):
return x*y
return Fy
>>> u = Fx(8)
>>> u
<function Fx.<locals>.Fy at 0x02ED7198>
>>> type(u)
<class 'function'>
>>> u(5)
40
>>> Fx(8)(8)
64
>>> Fy(8)
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
Fy(8)
NameError: name 'Fy' is not defined
>>>
nonlocal关键字:强制声明为非局部变量