知道答案并不重要,重要的是如何在不知道答案的情况下快速找到解决问题的方法。
一、在IPython中访问帮助文档 —— ? 和 help()函数
每一个Python对象都会包含一段doc string文字,大多数情况下这段文字会包含一个简短的对象概览和怎么使用这个对象的描述。Python有一个内建函数 help() 可以获得这段文字信息并输出。
- 查看内建函数的帮助文档
ipythonIn [1]: help(len)Help on built-in function len in module builtins:len(...) len(object) -> integer Return the number of items of a sequence or mapping.
ipythonIn [2]: len?Type: builtin_function_or_methodString form:
Namespace: Python builtinDocstring:len(object) -> integerReturn the number of items of a sequence or mapping. - 查看某个对象的某个方法的帮助文档
ipythonIn [3]: L = [1, 2, 3]In [4]: L.insert?Type: builtin_function_or_methodString form:
Docstring: L.insert(index, object) -- insert object before index - 查看对象本身的帮助文档
ipythonIn [5]: L?Type: listString form: [1, 2, 3]Length: 3Docstring:list() -> new empty listlist(iterable) -> new list initialized from iterable's items
- 查看自定义函数的帮助文档
ipythonIn [6]: def square(a): ....: """Return the square of a.""" ....: return a ** 2 ....:In [7]: square?Type: functionString form:
Definition: square(a)Docstring: Return the square of a. - ?几乎可以作用于任何对象
- 自定义函数时记得写doc string
二、在IPython中访问源代码 —— ??
ipythonIn [8]: square??Type: functionString form:Definition: square(a)Source:def square(a): "Return the square of a" return a ** 2
- 有时候你会发现 ?? 并不能访问到源代码,那通常是因为??的对象并不是由Python代码实现的,而是由C或者其他便编译扩展的语言实现的。这种情况下??和?给出的结果是一样的。(这种情况通常出现在Python的内建对象上)
三、使用Tab键进行探索
- Tab键补全对象可使用的属性、方法
ipythonIn [10]: L.
L.append L.copy L.extend L.insert L.remove L.sort L.clear L.count L.index L.pop L.reverseIn [10]: L.c L.clear L.copy L.count In [10]: L.co L.copy L.count 注:私有方法不会在表中列出,因为私有方法通常以__开头作为方法名,需要显式使用_将它显示出来。
- 在import引入模块或模块内的对象时使用Tab键补全
In [10]: from itertools import co
combinations compresscombinations_with_replacement countIn [10]: import Display all 399 possibilities? (y or n)Crypto dis py_compileCython distutils pyclbr... ... ...difflib pwd zmqIn [10]: import h hashlib hmac http heapq html husl - 通配符匹配 —— *
ipythonIn [10]: *Warning?BytesWarning RuntimeWarningDeprecationWarning SyntaxWarningFutureWarning UnicodeWarningImportWarning UserWarningPendingDeprecationWarning WarningResourceWarningIn [10]: str.*find*?str.findstr.rfind
注:之前的补全都是在我们知道我们要找的对象或属性的前几个字母时使用的,如果我们只知道中间的字母,或者最后的字母该怎么办呢?可以使用*这个符号。*可以匹配任何字符串,包括空字符。
四、快捷键
- 导航快捷键
Ctrl-a #光标移至当前行首Ctrl-e #光标移至当前行末Ctrl-b / 左箭头 #光标向左移一个字符Ctrl-f / 右箭头 #光标向右移一个字符
- 文本输入快捷键
Backspace键 #删除当前行光标所在处之前的字符Ctrl-d #删除当前行光标所在处之后的字符Ctrl-k #剪切当前光标所在处至行末之间的字符Ctrl-u #剪切当前行首至光标所在处之间的字符Ctrl-y #粘贴之前剪切的文本Ctrl-t #切换之前的两个字符
- 命令历史快捷键(不仅限于当前的session)
Ctrl-p / 上箭头 #获取上一条命令Ctrl-n / 下箭头 #获取下一条命令Ctrl-r #通过命令历史进行反向搜索
- 其他快捷键
Ctrl-l #清空当前终端屏幕Ctrl-c #中止当前Python命令Ctrl-d #退出当前的IPython session