函数—函数进阶(一)
-
函数—函数进阶—鸡汤
1、电影推荐—《荒野求生》
2、书籍推荐—《百年孤独》
-
函数—函数进阶—命名空间
名称空间又名name space, 顾名思义就是存放名字的地方,例如,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方
名称空间共3种,分别如下:
-
locals: 是函数内的名称空间,包括局部变量和形参
-
globals: 全局变量,函数定义所在模块的名字空间
-
builtins: 内置模块的名字空间
1 #命名空间 又名name space 存放变量名与变量值绑定关系的地方。 2 x = 1 3 print(globals() ) #结果为:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000245FDA96128>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Python/work/myFirstPro/第3章/29—函数—函数进阶—命名空间.py', '__cached__': None, 'x': 1} 4 print(locals()) #结果为:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000245FDA96128>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Python/work/myFirstPro/第3章/29—函数—函数进阶—命名空间.py', '__cached__': None, 'x': 1} 5 print(__builtins__) #结果为:<module 'builtins' (built-in)> 6 print(dir(__builtins__))#结果为:['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip'] 7 8 #小结: 9 # 不同变量的作用域不同,就是由这个变量所在命名空间决定的
作用域即范围
-
全局范围:全局存活,全局有效
-
局部范围:临时存活,局部有效
查看作用域方法 globals(),locals()
1 x = 1 2 globals() 3 {'__builtins__': {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects. Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>), '__build_class__': <built-in function __build_class__>, '__import__': <bound method ImportHookManager.do_import of <module '_pydev_bundle.pydev_import_hook.import_hook'>>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'Exception': <class 'Exception'>, 'TypeError': <class 'TypeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'GeneratorExit': <class 'GeneratorExit'>, 'SystemExit': <class 'SystemExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'ImportError': <class 'ImportError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'OSError': <class 'OSError'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'WindowsError': <class 'OSError'>, 'EOFError': <class 'EOFError'>, 'RuntimeError': <class 'RuntimeError'>, 'RecursionError': <class 'RecursionError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'NameError': <class 'NameError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'AttributeError': <class 'AttributeError'>, 'SyntaxError': <class 'SyntaxError'>, 'IndentationError': <class 'IndentationError'>, 'TabError': <class 'TabError'>, 'LookupError': <class 'LookupError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ValueError': <class 'ValueError'>, 'UnicodeError': <class 'UnicodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'AssertionError': <class 'AssertionError'>, 'ArithmeticError': <class 'ArithmeticError'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'SystemError': <class 'SystemError'>, 'ReferenceError': <class 'ReferenceError'>, 'MemoryError': <class 'MemoryError'>, 'BufferError': <class 'BufferError'>, 'Warning': <class 'Warning'>, 'UserWarning': <class 'UserWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'BytesWarning': <class 'BytesWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'ConnectionError': <class 'ConnectionError'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'InterruptedError': <class 'InterruptedError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'open': <built-in function open>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'copyright': Copyright (c) 2001-2018 Python Software Foundation. 4 All Rights Reserved. 5 Copyright (c) 2000 BeOpen.com. 6 All Rights Reserved. 7 Copyright (c) 1995-2001 Corporation for National Research Initiatives. 8 All Rights Reserved. 9 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. 10 All Rights Reserved., 'credits': Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands 11 for supporting Python development. See www.python.org for more information., 'license': Type license() to see the full license text, 'help': Type help() for interactive help, or help(object) for help about object., 'execfile': <function execfile at 0x00000202BA0FF6A8>, 'runfile': <function runfile at 0x00000202BA168F28>, '_': None}, 'sys': <module 'sys' (built-in)>, 'x': 1} 12 locals() 13 {'__builtins__': {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects. Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>), '__build_class__': <built-in function __build_class__>, '__import__': <bound method ImportHookManager.do_import of <module '_pydev_bundle.pydev_import_hook.import_hook'>>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'Exception': <class 'Exception'>, 'TypeError': <class 'TypeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'GeneratorExit': <class 'GeneratorExit'>, 'SystemExit': <class 'SystemExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'ImportError': <class 'ImportError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'OSError': <class 'OSError'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'WindowsError': <class 'OSError'>, 'EOFError': <class 'EOFError'>, 'RuntimeError': <class 'RuntimeError'>, 'RecursionError': <class 'RecursionError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'NameError': <class 'NameError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'AttributeError': <class 'AttributeError'>, 'SyntaxError': <class 'SyntaxError'>, 'IndentationError': <class 'IndentationError'>, 'TabError': <class 'TabError'>, 'LookupError': <class 'LookupError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ValueError': <class 'ValueError'>, 'UnicodeError': <class 'UnicodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'AssertionError': <class 'AssertionError'>, 'ArithmeticError': <class 'ArithmeticError'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'SystemError': <class 'SystemError'>, 'ReferenceError': <class 'ReferenceError'>, 'MemoryError': <class 'MemoryError'>, 'BufferError': <class 'BufferError'>, 'Warning': <class 'Warning'>, 'UserWarning': <class 'UserWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'BytesWarning': <class 'BytesWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'ConnectionError': <class 'ConnectionError'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'InterruptedError': <class 'InterruptedError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'open': <built-in function open>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'copyright': Copyright (c) 2001-2018 Python Software Foundation. 14 All Rights Reserved. 15 Copyright (c) 2000 BeOpen.com. 16 All Rights Reserved. 17 Copyright (c) 1995-2001 Corporation for National Research Initiatives. 18 All Rights Reserved. 19 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. 20 All Rights Reserved., 'credits': Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands 21 for supporting Python development. See www.python.org for more information., 'license': Type license() to see the full license text, 'help': Type help() for interactive help, or help(object) for help about object., 'execfile': <function execfile at 0x00000202BA0FF6A8>, 'runfile': <function runfile at 0x00000202BA168F28>, '_': None}, 'sys': <module 'sys' (built-in)>, 'x': 1} 22 __builtins__ 23 {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects. Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>), '__build_class__': <built-in function __build_class__>, '__import__': <bound method ImportHookManager.do_import of <module '_pydev_bundle.pydev_import_hook.import_hook'>>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'Exception': <class 'Exception'>, 'TypeError': <class 'TypeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'GeneratorExit': <class 'GeneratorExit'>, 'SystemExit': <class 'SystemExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'ImportError': <class 'ImportError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'OSError': <class 'OSError'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'WindowsError': <class 'OSError'>, 'EOFError': <class 'EOFError'>, 'RuntimeError': <class 'RuntimeError'>, 'RecursionError': <class 'RecursionError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'NameError': <class 'NameError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'AttributeError': <class 'AttributeError'>, 'SyntaxError': <class 'SyntaxError'>, 'IndentationError': <class 'IndentationError'>, 'TabError': <class 'TabError'>, 'LookupError': <class 'LookupError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ValueError': <class 'ValueError'>, 'UnicodeError': <class 'UnicodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'AssertionError': <class 'AssertionError'>, 'ArithmeticError': <class 'ArithmeticError'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'SystemError': <class 'SystemError'>, 'ReferenceError': <class 'ReferenceError'>, 'MemoryError': <class 'MemoryError'>, 'BufferError': <class 'BufferError'>, 'Warning': <class 'Warning'>, 'UserWarning': <class 'UserWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'BytesWarning': <class 'BytesWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'ConnectionError': <class 'ConnectionError'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'InterruptedError': <class 'InterruptedError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'open': <built-in function open>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'copyright': Copyright (c) 2001-2018 Python Software Foundation. 24 All Rights Reserved. 25 Copyright (c) 2000 BeOpen.com. 26 All Rights Reserved. 27 Copyright (c) 1995-2001 Corporation for National Research Initiatives. 28 All Rights Reserved. 29 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. 30 All Rights Reserved., 'credits': Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands 31 for supporting Python development. See www.python.org for more information., 'license': Type license() to see the full license text, 'help': Type help() for interactive help, or help(object) for help about object., 'execfile': <function execfile at 0x00000202BA0FF6A8>, 'runfile': <function runfile at 0x00000202BA168F28>, '_': None} 32 dir(__buildins__) 33 Traceback (most recent call last): 34 File "<input>", line 1, in <module> 35 NameError: name '__buildins__' is not defined 36 dir(__builtins__) 37 ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
-
函数—函数进阶—作用域的查找空间
1 n = 10 2 def func(): 3 n = 20 4 print('func',n) 5 6 def func2(): 7 n = 30 8 print('func2',n) 9 10 def func3(): 11 print("func3",n) 12 13 func3() 14 func2() 15 func() 16 17 # 结果为: 18 # func 20 19 # func2 30 20 # func3 30 21 22 #作用域的查找顺序(一层一层往上查找) LEGB: 23 # L:locals 是函数内的名字空间,包括局部变量和形参 24 # E:enclosing 外部嵌套函数的名字空间 25 # G:globals 全局变量,函数定义所在模块的名字空间 26 # B:builtins 内置模块的名字空间
-
函数—函数进阶—闭包
- 闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。
- 这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。
- 当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
- 也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。
- 这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。
1 def func(): 2 n = 10 3 4 def func2(): 5 print("func2:",n) 6 return func2 #返回func2的内存地址 7 8 f = func() 9 print(f) #结果为:<function func.<locals>.func2 at 0x000002F1B9F59730> 10 f() #结果为:func2: 10 11 12 #按常理来讲,执行完func()函数后,func2()已经释放了,但是它返回了 func2: 10 13 #在外部拿到了内部的函数,并且还可以使用内部函数的作用域里面的值 14 15 #闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
-
函数—函数进阶—装饰器(http://www.cnblogs.com/alex3714/articles/5765046.html)
1 user_status = False #用户登录后,这个改为True 2 3 def login(): 4 username1 = "alex" #假装这是DB里存的用户信息 5 password1 = "abc123" #假装这是DB里存的用户信息 6 global user_status 7 8 if user_status == False: 9 username = input("user:") 10 password = input("password:") 11 12 if username == username1 and password == password1: 13 print("welcome login.....") 14 user_status = True 15 else: 16 print("wrong username or password") 17 18 else: 19 print("用户已登录,验证通过...") 20 21 def home(): 22 print("————首页————") 23 24 def america(): 25 print("————欧美专区————") 26 login() 27 28 def japan(): 29 print("————日韩专区————") 30 31 def henan(): 32 print("————河南专区————") 33 login() 34 35 home() 36 henan() 37 america() 38 39 #问题:现在有很多模块需要加认证模块,这个代码虽然实现了功能,但是需要更改需要加认证的各个模块的代码,这直接违反了软件开发中的一个原则“开放-封闭”原则。 40 # 简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展: 41 # 封闭:已实现的功能代码块不应该被修改 42 # 开放:对现有功能的扩展开放 43 44 45 #写个认证方法,每次调用需要验证的功能时,直接把这个功能的函数名当做一个参数,传给验证模块。 46 user_status = False #用户登录后,这个改为True 47 48 def login(func): 49 username1 = "alex" #假装这是DB里存的用户信息 50 password1 = "abc123" #假装这是DB里存的用户信息 51 global user_status 52 53 if user_status == False: 54 username = input("user:") 55 password = input("password:") 56 57 if username == username1 and password == password1: 58 print("welcome login.....") 59 user_status = True 60 else: 61 print("wrong username or password") 62 if user_status == True: 63 func() 64 65 def home(): 66 print("————首页————") 67 68 def america(): 69 print("————欧美专区————") 70 71 def japan(): 72 print("————日韩专区————") 73 74 def henan(): 75 print("————河南专区————") 76 77 login(america) #america专区,需要验证,所以调用 login,把需要验证的功能 当做一个参数传给login 78 login(henan) #america专区,需要验证,所以调用 login,把需要验证的功能 当做一个参数传给login 79 80 #问题:现在每个需要认证的模块,都必须调用你的login()方法,并把自己的函数名传给你,人家之前可不是这么调用的,如果有100个模块需要认证,那这100个模块都得更改调用方式,这么多模块肯定不止是一个人写的,让每个人再去修改调用方式才能加上认证。
-
函数—函数进阶—装饰器流程分析
1 user_status = False #用户登录后,这个改为True 2 3 def login(func): 4 username1 = "alex" #假装这是DB里存的用户信息 5 password1 = "abc123" #假装这是DB里存的用户信息 6 global user_status 7 8 if user_status == False: 9 username = input("user:") 10 password = input("password:") 11 12 if username == username1 and password == password1: 13 print("welcome login.....") 14 user_status = True 15 else: 16 print("wrong username or password") 17 if user_status == True: 18 func() 19 20 def home(): 21 print("————首页————") 22 23 def america(): 24 print("————欧美专区————") 25 26 def japan(): 27 print("————日韩专区————") 28 29 def henan(): 30 print("————河南专区————") 31 32 america = login(america) #相当于把america这个函数替换了 33 henan = login(henan) 34 america() #那用户调用时依然写 35 henan() 36 #问题:还不等用户调用,america = login(america)就会先自己把america执行了,但是应该用户调用的时候 再执行才对。
1 #继续优化 2 user_status = False #用户登录后,这个改为True 3 def login(func): #把要执行的模块从这里传进来 4 def inner(): #再定义一层函数 5 username1 = "alex" #假装这是DB里存的用户信息 6 password1 = "abc123" #假装这是DB里存的用户信息 7 global user_status 8 9 if user_status == False: 10 username = input("user:") 11 password = input("password:") 12 13 if username == username1 and password == password1: 14 print("welcome login.....") 15 user_status = True 16 else: 17 print("wrong username or password") 18 else: 19 print("用户已登录,验证通过...") 20 if user_status: 21 func() # 只要这里验证通过了,就调用相应功能 22 23 return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数 24 25 def home(): 26 print("————首页————") 27 28 def america(): 29 print("————欧美专区————") 30 31 def japan(): 32 print("————日韩专区————") 33 34 @login #henan = login(henan) #相当于把henan这个函数替换了 35 def henan(): 36 print("————河南专区————") 37 38 #print(henan) #inner 39 henan() #inner()
-
函数—函数进阶—装饰器带参数1
1 user_status = False #用户登录后,这个改为True 2 def login(func): #把要执行的模块从这里传进来 3 def inner(*args,**kwargs): # 使用非固定参数 4 username1 = "alex" #假装这是DB里存的用户信息 5 password1 = "abc123" #假装这是DB里存的用户信息 6 global user_status 7 8 if user_status == False: 9 username = input("user:") 10 password = input("password:") 11 12 if username == username1 and password == password1: 13 print("welcome login.....") 14 user_status = True 15 else: 16 print("wrong username or password") 17 else: 18 print("用户已登录,验证通过...") 19 20 if user_status: 21 func(*args,*kwargs) # 使用非固定参数 只要这里验证通过了,就调用相应功能 22 23 return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数 24 25 def home(): 26 print("————首页————") 27 28 def america(): 29 print("————欧美专区————") 30 31 @login 32 def japan(): 33 print("————日韩专区————") 34 35 @login #henan = login(henan) #相当于把henan这个函数替换了 36 def henan(style): 37 print("————河南专区————",style) 38 39 #henan = login(henan) #相当于把henan这个函数替换了 40 #print(henan) #inner 41 henan("3p") #inner() 42 43 japan() #inner()
-
函数—函数进阶—装饰器带参数2
1 user_status = False # 用户登录了,就把这个改成True 2 3 def login(auth_type): #再包括一层在外面 4 def outer(func): # 把要执行的模块从这里传进来 5 def inner(*args, **kwargs): # 使用非固定参数 6 _username = "alex" # 假装这是DB里存的用户信息 7 _password = "abc!23" # 假装这是DB里存的用户信息 8 global user_status 9 if user_status == False: 10 username = input("user:") 11 password = input("pasword:") 12 if username == _username and password == _password: 13 print("welcome login....") 14 user_status = True 15 else: 16 print("wrong username or password!") 17 else: 18 print("用户已登录,验证通过...") 19 if user_status == True: 20 func(*args,**kwargs) # 使用非固定参数,支持多个参数; 21 return inner # 用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数 22 23 return outer 24 def home(): 25 print("---首页----") 26 def america(): 27 print("----欧美专区----") 28 29 def japan(): 30 print("----日韩专区----") 31 @login('QQ') # henan = login('qq')(henan) = inner 32 def henan(style): 33 print("----河南专区----",style) 34 35 henan("3p") #传入了参数