Python-自省机制
help
如果说能够通过一个函数就能够学会 Python,那这个函数一定就是 Python 提供的第一 个自带说明 help()。help 函数的作用就是查看对象的帮组文档。比如:
>>> help(123)
Help on int object:
class int(object)
| int(x=0) -> integer
| int(x, base=10) -> integer
|| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.__int__(). For floating point
| numbers, this truncates towards zero.
(此处有省略)。
help 函数其实就是查看对象的帮助文档,类似于把帮助文档放到 linux 命令的 less 中的效果,按下 q 退出。
上面的例子,显示了 int 对象的帮助文档,int 是内置类型,代码在编译 Python 的时候已经
编译过了,没有.py 的源代码。
那么我们来看看,help 到底有啥用呢,让 Python 来告诉你。
>>> help(help)
Help on _Helper in module _sitebuiltins object:class _Helper(builtins.object)
| Define the builtin 'help'.
|| This is a wrapper around pydoc.help that provides a helpful message
| when 'help' is typed at the Python interactive prompt.
|
| Calling help() at the Python prompt starts an interactive help session.
| Calling help(thing) prints help for the python object 'thing'.
还可以不加参数额。试试吧
>>> help()
Welcome to Python 3.5's help utility!If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.5/tutorial/.Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
输入上面标红的关键字试试。。
modules:显示模块
keywords:显示关键字
symbols:显示操作符
topics:显示常见主题
进去试试吧。。。。
那么问题来了,我们怎么知道 Python 的世界中还有哪些元素等待着我们去探索呢?我们怎
么找到这些元素呢?答案就是 Python 自带说明的第二个函数:dir。
dir
告诉我这个函数有啥用呢?先用上面的知识 help 来会会这个 dir。
>>> help(dir)
Help on built-in function dir in module builtins:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:
for a module object: the module's attributes.
for a class object: its attributes, and recursively the attributes
of its bases.
for any other object: its attributes, its class's attributes, and
recursively the attributes of its class's base classes.
简单的讲,dir 就是把这个对象有的属性(非模块对象也包括类属性,父类属性等)都
列出来放到一个 list 中,不知道啥是 list,那就先复习下上面的知识。若对象有__dir__方法,
就调用该方法,否则就用默认的方法。就拿上面的 help 实验一把:
>>> dir(help)
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__']
可以看到 help 这个函数有这些属性。
这样知道的还是不够多啊,只有 help 和 dir 函数。别急,dir 不接参数试试。
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
这个__builtins__不是内置的意思吗?看看他有什么货。
>>> 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', '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', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__',
'__import__', '__loader__', '__name__', '__package__', '__spec__', '_format', 'abs', 'all', 'any',
'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', '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', 'xrange', 'zip']
一下子出来这么多,小心脏激动了吧。找找 help,dir 是不是都在里面,那其他别的是
不是也是 Python 提供给我们的呢,试试才知道。
>>> abs
<built-in function abs>
是吧,内置函数。老师,这么多怎么学啊?前面的知识刚学完就忘了啊。help,help,
help 重要的事情说三遍。
好了这么多函数慢慢学吧,学到这个几个函数的时候是否有点小激动呢?callable,
hasattr,getattr,setattr,delattr,type,isinstance,issubclass。
callable
首先看看这个 callable 是不是讲的就是我们常说的调用,help 一下。
Help on built-in function callable in module builtins:
callable(obj, /)
Return whether the object is callable (i.e., some kind of function).
Note that classes are callable, as are instances of classes with a
__call__() method.
讲的很详细,字面意思也能明白,返回对象能不能调用,能调用就返回 True,不能就返
回 False。
>>> def f():
... pass
...
>>> callable(f)
True
在试试匿名函数。
>>> callable(lambda x:x)
True
帮助文档说了类可调用,类的实例若有__call__属性也能调用。
那么怎么知道对象有没有__call__属性呢?下面就是另一个内置函数,hasattr。
hasattr
继续套路,先 help 一下。
>>> help(hasattr)
Help on built-in function hasattr in module builtins:
hasattr(obj, name, /)
Return whether the object has an attribute with the given name.
This is done by calling getattr(obj, name) and catching AttributeError.
hasattr(obj,name)返回 obj 对象是否有 name 属性,那么上面的 callable==lambda
x:hasattr(x,’__call__’)?????这个内部实现在源码,我也没看。
上面的帮助文档说他是通过调用 getattr 来实现的,那 getattr 是个什么鬼?
getattr
套路啊,记得。
>>> help(getattr)
Help on built-in function getattr in module builtins:
getattr(...)
getattr(object, name[, default]) -> value
Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
When a default argument is given, it is returned when the attribute doesn't
exist; without it, an exception is raised in that case.
文档看出 getattr(object,name[,default])就是获取 object 对象的 name 属性,若 name 不
存在,若定义了 default 参数返回 default,否则抛出异常。
那么这样对吗?????
def hasattr(obj, name):
try:
getattr(obj,name)
except AttributeError:
return False
return True
setattr,delattr
现在我们学会了判断属性是否存在,获取属性,那我们怎么设置属性,删除属性呢?之
前 dir(‘__builtins__’)返回的列表中找找,setattr,delattr 一看就是这两个,长的太像了。具体
用法,help 吧,不讲了。。
type
现在知道对象的属性怎么操作了,然后是不是就想知道这个对象到底是个什么玩意啊,
那么 type 就出场了。
>>> help(type)
Help on class type in module builtins:
class type(object)
| type(object_or_name, bases, dict)
| type(object) -> the object's type
| type(name, bases, dict) -> a new type
|| Methods defined here:
|| __call__(self, /, *args, **kwargs)
| Call self as a function.
|(此处有省略。。)
显示一个对象的类型,还可以创建一个类型。
type 只提供一个参数,返回对象的类型,提供三个参数返回一个新类型。>>> type('123')
<class 'str'>
>>> type(123)
<class 'int'>
>>> a=type('mylist',(list,),{‘n’:1}) #第一个参数为类型名,第二个参数为类型的父类,用 tuple,
可以有多个,第三个参数为默认类属性组成的字典。>>> a
<class '__main__.mylist'>
>>> type(a)
<class 'type'>
>>> a.n
1
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append',
'clear', 'copy', 'count', 'extend', 'index', 'insert', 'n', 'pop', 'remove', 'reverse', 'sort']是不是有 list 的所有属性和 n 属性?type 还有一些属性很有意思,比如
__subclasses__,__bases__留给大家研究。 isinstance
那么上面生成的 a 和 type 是个什么关系呢?以及,之前的学的 int,list 这些和 type 是什
么关系呢,答案是他们都是 type 的实例。怎么证明?答案在内置函数中找。isinstance
help 步骤略。自行 help。。
isinstance(obj, class_or_tuple)就是判断对象 obj 是否为 class_or_tuple 的实例或者其中一
个类的实例。
>>> isinstance(a,type)
True
>>> isinstance(int,type)
True
issubclass
剩下一个 issubclass,用法自行 help。。。。
之前讨论的 bool 和 int 的关系,就可以用这个函数解释。
>>> issubclass(bool,int)
True
bool 是 int 的子类。
类中的常见自省属性
既然说到类,那我们就看看常见的类中到底是怎么做自带说明的。
>>> class A:
... def __init__(self,data):
...
...
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__']
看到熟悉了的吧__delattr__,__getattribute__,__setattr__,和之前学的是不是很像?再来看
看第一个属性__class__
>>> A.__class__
<class 'type'>
原来 A 是 type 的实例,还不相信,再复习下。
>>> isinstance(A,type)
True
然后可以看到__dict__是不是很熟悉,试试
>>> A.__dict__
mappingproxy({'__module__': '__main__', '__init__': <function A.__init__ at 0x007CAC90>,
'__doc__': None, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute
'__weakref__' of 'A' objects>})
原来是类的基本属性,dict 为啥不是字典呢?别急用实例试试。
>>> A(123).__dict__
{'data': 123}
既然是类,那么能不能知道有哪些基类子类之类的,当然可以。试过了 A 的所有属性还
没有看到额~怎么办?那有可能 dir 出问题了,没有显示全额~那就再底层点,用 object.__dir__
>>> object.__dir__(A)
['__abstractmethods__', '__setattr__', 'mro', '__eq__', '__doc__', '__str__', '__subclasshook__',
'__le__', '__prepare__', '__subclasses__', '__dict__', '__gt__', '__qualname__',
self.data=data
'__text_signature__', '__repr__', '__dir__', '__init__', '__dictoffset__', '__instancecheck__',
'__ge__', '__base__', '__sizeof__', '__module__', '__basicsize__', '__itemsize__', '__call__',
'__new__', '__mro__', '__hash__', '__reduce_ex__', '__getattribute__', '__class__', '__bases__',
'__subclasscheck__', '__delattr__', '__lt__', '__reduce__', '__format__', '__weakrefoffset__',
'__flags__', '__ne__', '__name__']
试试里面的属性吧~
>>> A.__name__ #类的本名
'A'
>>> A.__subclasses__()
[]
>>> A.__base__
<class 'object'>
>>> A.__module__
'__main__'
>>> A.__bases__
(<class 'object'>,)
#类的子类
#类的基类
#类所在的模块
#类的基类集
之前用到了实例,看看实例中还有些啥玩意。
>>> A(123).__module__ '__main__'
>>> A(123).__class__
<class '__main__.A'>
>>> A
<class '__main__.A'>
>>> A(123).__class__ is A
True
>>> A.__doc__
#实例的类所在的模块
#实例的类
#实例的类的帮助文档
拿到实例就知道他是什么类的实例,不信试试
>>> r = range(10)
>>> r.__class__
<class 'range'>
函数中的自省属性
类玩完了,(其实没有玩完,很多可以挖掘的),是不是跃跃欲试的玩下函数?马上就来。
>>> def func(a,b):
... c=a+b
... print(c)
... return c+1
...>>> dir(func)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__',
'__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__',
'__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__',
'__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__']之前说过函数之所以会叫调用是因为有__call__属性,这里可以看到,再试试其他属性。
>>> func.__class__
<class 'function'>
函数是 function 类的实例。
>>> func.__closure__ #闭包,这个留给老司机
>>> func.__code__ #code 对象
<code object func at 0x007B4250, file "<stdin>", line 1>
>>> func.__doc__
>>> func.__name__
'func'
>>> f = func
>>> f.__name__
'func'
#函数的帮助文档
#函数的本名
函数的主要内容在 code 对象,
>>> dir(func.__code__)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags',
'co_freevars', 'co_kwonlyargcount', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize',
'co_varnames']
看看里面都有些啥。
>>> func.__code__.co_consts
(None, 1)
>>> func.__code__.co_argcount
2
>>> func.__code__.co_nlocals
3
>>> func.__code__.co_filename
'<stdin>'
>>> func.__code__.co_names
('print',)
>>> func.__code__.co_name
'func'
>>> func.__code__.co_varnames
('a', 'b', 'c')
>>> func.__code__.co_stacksize
2
>>> func.__code__.co_stacksize
2
还有其他属性,自行探索。。。
inspect
#函数用到的常量
#函数的参数个数
#函数局部变量的个数
#函数所在文件的文件名
#函数用到的函数名
#函数本名
#函数中变量名
#函数中栈大小
#编译之后的字节码
有了这么多让 Python 做自我说明的方法,还不满足?Good boy!再来重头戏,inspect
模块。
help> inspect
Help on module inspect:
NAME
inspect - Get useful information from live Python objects.
DESCRIPTION
This module encapsulates the interface provided by the internal special
attributes (co_*, im_*, tb_*, etc.) in a friendlier fashion.
It also provides some help for examining source code and class layout.
Here are some of the useful functions provided by this module:
ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),
isroutine() - check object types
getmembers() - get members of an object that satisfy a given condition
getfile(), getsourcefile(), getsource() - find an object's source code
getdoc(), getcomments() - get documentation on an object
getmodule() - determine the module that an object came from
getclasstree() - arrange classes so as to represent their hierarchy
getargspec(), getargvalues(), getcallargs() - get info about function arguments
getfullargspec() - same, with support for Python 3 features
formatargspec(), formatargvalues() - format an argument spec
getouterframes(), getinnerframes() - get info about frames
currentframe() - get the current stack frame
stack(), trace() - get info about frames on the stack or in a traceback
signature() - get a Signature object for the callable
上面的介绍都够详细了,我就只举两个例子。
>>> import threading
>>> import inspect
>>> inspect.getsourcefile(threading)
'/usr/lib/python3.5/threading.py'
>>> inspect.getsource(threading)
'"""Thread module emulating a subset of Java\'s threading model."""\n\nimport sys as
_sys\nimport _thread\n\nfrom time import monotonic as _time\nfrom traceback import
format_exc as _format_exc\nfrom _weakrefset import WeakSet\nfrom itertools import islice as
_islice, count as _count\ntry:\n
(此处有省略......)
对函数也可以,但是要记住,这两个方法对内置的对象是行不通的,因为之前说过内置
对象,是在编译 Python 的时候写入的没有 py 的代码。怎么判断是不是内置对象?又没有好
好看前面的文档啊..............................inspect.isbuiltin()或者 obj.__name__ in dir(‘__builtins__’)
dis
还感觉不够么,那只能发绝招了~~~~~~~dis 模块
>>>
>>>
1
>>>
...
...
...
>>>
2
3
import dis
dis.dis('a=1')
def f(a):
for i in range(a):
print(i)
dis.dis(f)
>>
>>
>>
0 SETUP_LOOP
3 LOAD_GLOBAL
6 LOAD_FAST
9 CALL_FUNCTION
12 GET_ITER
13 FOR_ITER
16 STORE_FAST
19 LOAD_GLOBAL
22 LOAD_FAST
25 CALL_FUNCTION
28 POP_TOP
29 JUMP_ABSOLUTE
32 POP_BLOCK
33 LOAD_CONST
36 RETURN_VALUE
0 LOAD_CONST
3 STORE_NAME
6 LOAD_CONST
9 RETURN_VALUE
0 (1)
0 (a)
1 (None)
30 (to 33)
0 (range)
0 (a)
1 (1 positional, 0 keyword pair)
16 (to 32)
1 (i)
1 (print)
1 (i)
1 (1 positional, 0 keyword pair)
13
0 (None)
有没有熟悉汇编的童鞋,讲解下啥意思。貌似不用熟悉汇编英文好就可以了。这个
函数展现了函数代码或者函数对象编译之后变成字节码之后的执行过程。是不是越来越
接近底层了?
总结
讲了这么多,讲下这个 Python 的自带说明的名字叫自省。(反射是 java 的说法,我
们叫自省)
那么自省是什么?总结下
自省简单的说,就是用 python 的代码自己告诉这个对象是什么,有什么,以及祖
宗是什么,子孙是什么....
好了总结下 python 提供的自省机制:help,dir 。没了么?是的没了其他的可以用
这两个找到,但是每次用的时候再去找吗?当然不是,所以多用多积累,多记忆吧。谢
谢大家。
Python-自省机制的更多相关文章
- Python的自省机制
什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为. 在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么.它知道什么以及它能做什么.自省向程序员提供了极大的灵活 ...
- Python 自省指南
原作者:Patrick K. O'Brien 什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生 ...
- Python面试题之Python反射机制
0x00 前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = ...
- python自省指南
深入python中对自省的定义: python的众多强大功能之一,自省,正如你所知道的,python中万物皆对象,自省是指代码可以查看内存中以对象形式存在的其他模块和函数,获取它们的信息,并对它们进行 ...
- 【Python&数据结构】 抽象数据类型 Python类机制和异常
这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...
- Python反射机制理解
Python反射机制用沛齐老师总结的话说就是:利用字符串的形式去对象(模块)中操作(寻找)成员. getattr(object, name) object代表模块,name代表模块中的属性或成员,该函 ...
- [py]python自省工具
参考 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这 ...
- 理解Python命名机制
理解Python命名机制 本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),欢迎转载,但必须保留此声明且不得用于商业目的.谢谢. 引子 我热情地邀请大家猜测下 ...
- MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具
mybatis – MyBatis 3 | 日志 http://www.mybatis.org/mybatis-3/zh/logging.html MyBatis 内置日志工厂基于运行时自省机制选择合 ...
- Python自省 type(),dir(),getattr(),hasattr(),isinstance().
Python自省 这个也是python彪悍的特性. 自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr() ...
随机推荐
- Spring WebSocket实现消息推送
第一步: 添加Spring WebSocket的依赖jar包 (注:这里使用maven方式添加 手动添加的同学请自行下载相应jar包放到lib目录) <!-- 使用spring websocke ...
- c# 项目文件,C#viual studio使用方法
一.项目文件 1)Properties节点下主要存放的是当前程序集相关的信息,如版本号.标题等.双击”Properties“,打开如下项目属性窗口,可以设置项目相关的一些参数. 2)引用 节点主要列出 ...
- Nagle's algorithm
w41字节的数据包只有1字节的可用信息.以减少数据包发送量来提高TCP/IP网络性能. https://en.wikipedia.org/wiki/Nagle's_algorithm https:// ...
- MySQL数据库主从同步延迟分析及解决方案
一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...
- Python之OS模块函数
函数列表: 1 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os. ...
- 001-window下运行linux
一.概述 前提:有条件的情况下,自行安装 在windows上模拟linux环境,主要有三种方法: 1.VMware等虚拟机,缺点:占用系统资源多,运行速度慢. 2.Cygwin等模拟环境,用windo ...
- MySQL · 引擎特性 · InnoDB redo log漫游(转)
前言 InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性. 和大多数关系型数据库一样, ...
- Linux mount Windows目录
[问题描述] Windows 机器192.168.1.103共享了 /share/yasi 目录,并且赋予了写的权限,在Windows机器下可以用 yasi/pass 登录.在一台CentOS 6.3 ...
- oracle 查看隐藏参数
隐藏参数 (hidden parameters) ,由oracle内部使用,以 '_' 开头. 可以通过以下两种方式查看所有隐藏参数: SELECT i.ksppinm name, i.ksppd ...
- sublime2常用插件
Package Control 1. 安装方法 • 下载地址:https://sublime.wbond.net/Package%20Control.sublime-package • 将下载下来的P ...