<think>我们正在使用IPython,这是一个增强的Python交互式环境。在IPython中,我们可以方便地查看Python的关键字和内置函数(预定义标识符)。
根据引用[1][2][3],我们知道可以使用keyword模块来查看Python的关键字。另外,我们可以查看内置函数的名字(注意:内置函数不是关键字,但也是预定义的标识符)。
步骤:
1. 导入keyword模块,使用keyword.kwlist查看所有关键字。
2. 查看内置函数:可以通过内置模块builtins(在Python 3中)来查看,但通常我们也可以直接查看__builtins__模块(在交互式环境中)的字典,或者使用dir(__builtins__)查看所有内置函数和属性。
3. 在IPython中,我们还可以使用一些魔法命令,例如使用“?”来获取帮助,但这里我们主要使用Python代码。
注意:关键字是语言保留的,不能用作标识符;而内置函数的名字虽然可以被覆盖,但通常也不建议覆盖。
具体操作:
查看关键字:
import keyword
keyword.kwlist
查看内置函数和内置异常等(注意:dir(__builtins__)会返回一个列表,包含内置函数、异常和其他属性的名称):
我们可以通过dir(__builtins__)然后过滤出可调用的对象(函数)或者通过观察名字(通常小写的是函数,但也有一些异常对象)来查看。
但是,更准确的方式是:使用内置模块builtins(需要导入,但在__builtins__中已经存在)。
在IPython中,我们可以这样做:
import builtins
# 然后获取所有内置函数的名称
[name for name in dir(builtins) if callable(getattr(builtins, name))]
但是,由于内置模块中还有一些类(例如int, str)以及异常等,所以上述方法会返回非常多。我们也可以只关注那些不是类且不是异常的可调用对象?但这样区分比较麻烦。
实际上,我们通常直接查看dir(builtins)输出,然后人为区分。
另外,引用[3]中提到了在命令行交互环境中查看关键字的方法,我们可以在IPython中同样使用。
因此,我们编写以下代码:
1. 查看关键字:
import keyword
print("Python关键字:", keyword.kwlist)
2. 查看内置函数(预定义标识符):
我们可以使用dir(__builtins__)来查看,但为了更清晰,我们可以打印出所有内置函数(可调用对象)的名字。
注意:在IPython中,我们还可以使用“?”来获取帮助,例如输入“keyword?”可以查看keyword模块的帮助。
下面给出IPython中的操作步骤:
步骤一:查看关键字
In [1]: import keyword
In [2]: keyword.kwlist
步骤二:查看内置函数
我们可以先查看__builtins__模块中的内容:
In [3]: dir(__builtins__)
但是输出会很长,我们可以使用列表推导式来过滤出函数(可调用对象):
In [4]: [f for f in dir(__builtins__) if callable(getattr(__builtins__, f))]
但是注意,这样可能会包含一些类(因为类也是可调用的)。如果我们只想看函数,可以进一步用类型判断,但这样更复杂,而且内置函数中有些是类(如int, str),有些是函数(如len, print)。通常我们不需要严格区分。
另外,IPython提供了一个更简洁的内置函数查看方式:使用%魔术命令,但标准方法还是通过dir。
考虑到用户要求,我们直接使用上述方法。
下面给出一个完整的IPython会话示例:
```python
In [1]: import keyword
In [2]: keyword.kwlist
Out[2]:
['False',
'None',
'True',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
In [3]: # 查看内置函数和内置类型等(预定义标识符)
In [4]: # 使用dir(__builtins__)会输出很长,我们可以分页显示或者只输出函数名字
In [5]: # 我们可以过滤出可调用的对象(包括函数和类)
In [6]: builtin_callables = [name for name in dir(__builtins__) if callable(getattr(__builtins__, name))]
In [7]: # 打印前20个
builtin_callables[:20]
Out[7]:
['ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'BlockingIOError',
'BrokenPipeError',
'BufferError',
'BytesWarning',
'ChildProcessError',
'ConnectionAbortedError',
'ConnectionError',
'ConnectionRefusedError',
'ConnectionResetError',
'DeprecationWarning',
'EOFError',
'Ellipsis',
'EnvironmentError',
'Exception',
'False',
'FileExistsError']
# 注意:这里输出的是可调用的内置对象,包括异常类、内置函数和内置类型等。
```
因此,我们可以告诉用户,在IPython中查看关键字和内置函数(预定义标识符)的方法。
注意:由于内置函数和类的数量很多,我们通常不会全部记住,而是根据需要使用。
另外,在IPython中,我们还可以使用Tab键自动补全,例如输入“__builtins__.”后按Tab,就会列出所有属性。
为了提高可读性,我们可以将内置函数(而不包括异常类)单独列出来,但Python并没有提供这样的内置列表。我们可以参考官方文档,或者使用inspect模块来进一步判断,但这超出了本问题的范围。
总结回答:
在IPython中查看关键字和预定义标识符的方法如下:
1. 关键字:使用`keyword.kwlist`
2. 预定义标识符(包括内置函数、内置类型等):使用`dir(__builtins__)`,或者进一步过滤可调用对象。
但是,需要注意的是,预定义标识符不仅包括内置函数,还包括内置类型、内置常量(如True, False, None)和内置异常等。
另外,引用[1][2][3]中提到的关键字查看方法也适用于IPython。
根据引用[5],我们还可以在IPython中使用格式化输出,但这里不涉及。
因此,我们给出以下代码示例:
```python
# 在IPython中查看关键字
import keyword
print("Python关键字列表:")
print(keyword.kwlist)
# 查看内置函数等预定义标识符
print("\n内置函数和类型等预定义标识符:")
# 我们打印前50个以避免过多输出
builtin_names = dir(__builtins__)
print(builtin_names[:50]) # 实际使用时可能不需要打印全部
# 如果想只查看函数(不包括类),可以使用inspect模块进行判断,但这里不展开。
```
注意:在IPython中,我们可以直接运行这些代码。
相关问题:
1. 如何判断一个字符串是否是Python关键字?
2. 如何在Python中覆盖内置函数?这样做有什么风险?
3. 如何查看Python中所有保留的关键字和内置函数?
4. 在IPython中,有哪些快捷方式可以查看帮助?
5. Python中的关键字和内置函数有什么区别?
注意:用户的问题是关于IPython的,所以我们在回答中要体现IPython环境。
</think>在 IPython 中使用以下方法查看 Python 关键字和预定义标识符:
### 1. 查看 Python 关键字
使用 `keyword` 模块查看 Python 保留的关键字:
```python
In [1]: import keyword
In [2]: keyword.kwlist # 列出所有关键字
Out[2]:
['False',
'None',
'True',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
In [3]: keyword.iskeyword('if') # 检查特定词是否为关键字
Out[3]: True
```
### 2. 查看内置函数和对象(预定义标识符)
使用内置函数 `dir()` 查看当前命名空间中的标识符:
```python
In [4]: dir(__builtins__) # 查看所有内置函数和对象
Out[4]:
['ArithmeticError',
'AssertionError',
...,
'abs',
'all',
'any',
'ascii',
'bin',
'bool',
'breakpoint',
'bytearray',
'bytes',
'callable',
'chr',
'classmethod',
'compile',
'complex', # 预定义的复数类型
'copyright',
'credits',
...,
'str', # 预定义的字符串类型
'sum',
'super',
'tuple',
'type',
'vars',
'zip']
```
### 3. 使用 IPython 特有功能
IPython 提供增强的交互功能:
```python
In [5]: len? # 查看函数文档
Signature: len(obj, /)
Docstring: Return the number of items in a container.
Type: builtin_function_or_method
In [6]: str.*find*? # 使用通配符查找标识符
str.find
str.rfind
```
### 关键区别说明
| 概念 | 关键字 | 预定义标识符 |
|----------------|--------------------------------|--------------------------|
| **性质** | 语言保留字,不可重新定义 | 内置函数/类,可被覆盖 |
| **数量** | 35个(Python 3.9) | 150+个 |
| **验证方法** | `keyword.iskeyword()` | `dir(__builtins__)` |
| **示例** | `if`, `for`, `def` | `print()`, `str`, `list` |
| **是否可变** | 不可修改 | 可重新绑定 |
### 注意事项
1. 关键字不能作为变量名,否则会引发 `SyntaxError`
2. 内置函数可以被覆盖(但不推荐):
```python
In [7]: str = 123 # 覆盖内置str类型(危险操作)
In [8]: type(str)
Out[8]: int # 原str功能已丢失
```
3. 恢复覆盖的内置函数:重启 IPython 或使用 `del str`[^4]