文章目錄
- 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.sepstring inserted between values, default a space.endstring appended after the last value, default a newline.filea file-like object (stream); defaults to the current sys.stdout.flushwhether 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 = 123def fn() : b = 10print('a = ',a)print('b = ',b)fn()# 結果:
a = 123
b = 10***Repl Closed***
a = 123def fn() : b = 10print('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 = 123def fn() : a = 456print('內部a = ',a)fn()
print('外部a = ',a)# 結果:
內部a = 456
外部a = 123***Repl Closed***
a = 123def fn() : global aa = 456print('內部a = ',a)fn()
print('外部a = ',a)# 結果:
內部a = 456
外部a = 456***Repl Closed***
4. 命名空間
命名空間(namespace)指的是變量存儲的位置,每一個變量都需要存儲到指定的命名空間中。
每一個作用域都會有一個對應的命名空間。全局命名空間,用來保存全局變量,函數命名空間用來保存函數中的變量。命名空間實際上是個字典,專門用來存儲變量的字典
- locals() 用來獲取當前作用域的命名空間
如果在全局作用域中調用locals() 返回全局命名空間,如果在函數作用域中調用locals()則獲取函數命名空間,返回的是一個字典
a = 123scope = 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***