【Python】12、函数-02
文章目录
- 1. 返回值
- 2.文档字符串
- 3. 作用域
- 4. 命名空间
1. 返回值
返回值就是函数执行以后返回的结果,可以通过return来指定函数的返回值。返回值可以通过变量接收返回值
- return 后可以返回任意的对象,甚至是一个函数
- 如果仅写一个return或者不写return,则相当于return None
- 函数中return后的代码都不会执行
def fn() :
return 123;
res = fn()
print('res = ',res)
# 结果:
res = 123
***Repl Closed***
2.文档字符串
help()是Python中的内置函数,通过help()函数可以查询Python中的函数用法
语法:help(函数对象)
help(print)
# 结果:
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
***Repl Closed***
- 文档字符串(doc str)
在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明,编写的文档字符串可以通过help()函数进行查看
定义方法:在函数的第一行写一个字符串就是文档字符串,一般使用双重引号进行跨行描述。
def fn(a,b,c) :
'''
这是一个求和方法,将传入的a,b,c三个数进行求和
'''
return a+b+c;
help(fn)
# 结果:
Help on function fn in module __main__:
fn(a, b, c)
这是一个求和方法,将传入的a,b,c三个数进行求和
***Repl Closed***
3. 作用域
作用域(scope)指的是变量的生效区域,在Python中共有两种作用域:
-
全局作用域
全局作用域在程序执行时创建,在程序执行结束时销毁;
所有函数以外的区域都是全局作用域;
全局作用域中定义的变量,都属于全局变量,全局变量可以在程序任意位置访问到 -
函数作用域
函数作用域在函数调用时创建,在调用结束时销毁;
函数每调用一次就会产生一个新的函数作用域;
在函数作用域中定义的变量,都是局部变量,只能在函数内部被访问 -
变量的查找
当使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则往上级作用域寻找,直到找到为止,如果最终全局作用域没有找到则报错
a = 123
def fn() :
b = 10
print('a = ',a)
print('b = ',b)
fn()
# 结果:
a = 123
b = 10
***Repl Closed***
a = 123
def fn() :
b = 10
print('a = ',a)
fn()
print('b = ',b)
# 结果:
a = 123
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Sublime Text\Packages\User\函数.py", line 18, in <module>
print('b = ',b)
^
NameError: name 'b' is not defined
***Repl Closed***
在函数中为变量赋值时,默认都是为局部变量赋值,如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量
a = 123
def fn() :
a = 456
print('内部a = ',a)
fn()
print('外部a = ',a)
# 结果:
内部a = 456
外部a = 123
***Repl Closed***
a = 123
def fn() :
global a
a = 456
print('内部a = ',a)
fn()
print('外部a = ',a)
# 结果:
内部a = 456
外部a = 456
***Repl Closed***
4. 命名空间
命名空间(namespace)指的是变量存储的位置,每一个变量都需要存储到指定的命名空间中。
每一个作用域都会有一个对应的命名空间。全局命名空间,用来保存全局变量,函数命名空间用来保存函数中的变量。命名空间实际上是个字典,专门用来存储变量的字典
- locals() 用来获取当前作用域的命名空间
如果在全局作用域中调用locals() 返回全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典
a = 123
scope = locals()
print(type(scope))
print(a)
print(scope['a'])
# 结果
<class 'dict'>
123
123
***Repl Closed***
scope = locals()
scope['c'] = 456 # 一般不建议这样操作
print(c)
print(scope['c'])
# 结果
456
456
***Repl Closed***
- 函数内部的命名空间
def fn() :
scope = locals()
print(scope)
fn()
# 结果:
{}
***Repl Closed***
- global() 函数可以获取到全局的命名空间
def fn() :
globals_scope = globals()
print(globals_scope)
fn()
# 结果
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000028EC9419CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\Administrator\\AppData\\Roaming\\Sublime Text\\Packages\\User\\函数.py', '__cached__': None, 'fn': <function fn at 0x0000028EC97FF240>}
***Repl Closed***