Python_两大法宝dir() 与 help() 的妙用

1. 引言

在 Python 的学习与开发过程中,我们常常会遇到这样的困惑:面对一个陌生的库或模块,不知道它提供了哪些功能,也不知道某个函数该怎么用。其实,Python 早已为我们准备好了两件「法宝」------dir() 与 help()。它们就像一把万能钥匙和一本随身的说明书,能帮我们快速摸清任何包、模块或对象的底细。

本文将以 PyTorch 为例,带你直观感受这两大法宝的威力。

2. 什么是 Python 的两大法宝

我们可以把 Python 中的包(package)想象成一个大型仓库,仓库里划分了不同的区域,每个区域摆放着不同的工具。而 Python 语法为我们提供了两个探索这个仓库的利器:

  • dir():相当于「打开仓库大门」,让我们一眼看清里面有多少分区、多少工具。
  • help():相当于「随身的说明书」,告诉我们某个工具具体该怎么使用。

简单来说,dir() 负责「看全貌」,help() 负责「查细节」。

3. 实战演示:以 PyTorch 为例

下面我们以深度学习框架 PyTorch 为例,实际体验一下这两大法宝的用法。

3.1 检查环境:CUDA 是否可用

在开始之前,我们通常需要确认当前环境是否支持 GPU 加速。这时可以这样写:

python 复制代码
import torch
print(torch.cuda.is_available())

运行结果:

text 复制代码
True

输出 True 表示当前环境可以使用 CUDA(GPU 加速)。

3.2 使用 help() 查看函数用法

如果我们想知道 torch.cuda.is_available 这个函数具体是做什么的、返回什么,直接用 help() 即可:

python 复制代码
help(torch.cuda.is_available)

运行结果:

text 复制代码
Help on function is_available in module torch.cuda:

is_available() -> bool
    Returns a bool indicating if CUDA is currently available.

从帮助信息中我们可以清楚地看到:该函数返回一个布尔值(bool),用于指示 CUDA 当前是否可用。

3.3 使用 dir() 查看包内工具

如果我们想看看 torch 这个包里到底有哪些「区域」和「工具」,用 dir() 就能一览无余:

python 复制代码
dir(torch)

运行结果(节选):

text 复制代码
['AVG',
 'AggregationType',
 'AliasDb',
 'AnyType',
 'Argument',
 'ArgumentSpec',
 'BFloat16Storage',
 'BFloat16Tensor',
 'BenchmarkConfig',
 ...
 'abs',
 'abs_',
 'absolute',
 'acos',
 'acos_',
 'acosh',
 'acosh_',
 'adaptive_avg_pool1d',
 'adaptive_max_pool1d',
 'add',
 'addbmm',
 'addcdiv',
 'addcmul',
 'addmm',
 'addmv',
 'addr',
 'affine_grid_generator',
 'align_tensors',
 'all',
 'allclose',
 'alpha_dropout',
 'alpha_dropout_',
 'amax',
 'amin',
 'aminmax',
 'angle',
 'any',
 'ao',
 'arange',
 'arccos',
 'arccos_',
 'arccosh',
 'arccosh_',
 'arcsin',
 'arcsin_',
 'arcsinh',
 'arcsinh_',
 'arctan',
 'arctan_',
 'arctanh',
 'arctanh_',
 'are_deterministic_algorithms_enabled',
 'argmax',
 'argmin',
 'argsort',
 'as_strided',
 'as_strided_',
 'as_tensor',
 'asin',
 'asin_',
 'asinh',
 'asinh_',
 'atan',
 'atan_',
 'atanh',
 'atanh_',
 'atleast_1d',
 'atleast_2d',
 'atleast_3d',
 'attr',
 'autocast',
 'autocast_decrement_nesting',
 'autocast_increment_nesting',
 'autocast_mode',
 'autograd',
 'avg_pool1d',
 'backends',
 'baddbmm',
 'bartlett_window',
 'base_py_dll_path',
 'batch_norm',
 'batch_norm_backward_elemt',
 'batch_norm_backward_reduce',
 'batch_norm_elemt',
 'batch_norm_gather_stats',
 'batch_norm_gather_stats_with_counts',
 'batch_norm_stats',
 'batch_norm_update_stats',
 'bernoulli',
 'bfloat16',
 'bilinear',
 'binary_cross_entropy_with_logits',
 'bincount',
 'binomial',
 'bitwise_and',
 'bitwise_left_shift',
 'bitwise_not',
 'bitwise_or',
 'bitwise_right_shift',
 'bitwise_xor',
 'blackman_window',
 'block_diag',
 'bmm',
 'bool',
 'broadcast_shapes',
 'broadcast_tensors',
 'broadcast_to',
 'bucketize',
 'can_cast',
 'candidate',
 'cartesian_prod',
 'cat',
 'cdist',
 'cdouble',
 'ceil',
 'ceil_',
 'celu',
 'celu_',
 'cfloat',
 'chain_matmul',
 'channel_shuffle',
 'channels_last',
 'channels_last_3d',
 'cholesky',
 'cholesky_inverse',
 'cholesky_solve',
 'choose_qparams_optimized',
 'chunk',
 'clamp',
 'clamp_',
 'clamp_max',
 'clamp_max_',
 'clamp_min',
 'clamp_min_',
 'classes',
 'clear_autocast_cache',
 'clip',
 'clip_',
 'clone',
 'column_stack',
 'combinations',
 'compiled_with_cxx11_abi',
 'complex',
 'complex128',
 'complex32',
 'complex64',
 'concat',
 'conj',
 'conj_physical',
 'conj_physical_',
 'constant_pad_nd',
 'contiguous_format',
 'conv1d',
 'conv2d',
 'conv3d',
 'conv_tbc',
 'conv_transpose1d',
 'conv_transpose2d',
 'conv_transpose3d',
 'convolution',
 'copysign',
 'corrcoef',
 'cos',
 'cos_',
 'cosh',
 'cosh_',
 'cosine_embedding_loss',
 'cosine_similarity',
 'count_nonzero',
 'cov',
 'cpp',
 'cpu',
 'cross',
 'ctc_loss',
 'ctypes',
 'cuda',
 'cuda_path',
 'cuda_version',
 'cudnn_affine_grid_generator',
 'cudnn_batch_norm',
 'cudnn_convolution',
 'cudnn_convolution_add_relu',
 'cudnn_convolution_relu',
 'cudnn_convolution_transpose',
 'cudnn_grid_sampler',
 'cudnn_is_acceptable',
 'cummax',
 'cummin',
 'cumprod',
 'cumsum',
 'cumulative_trapezoid',
 'default_generator',
 'deg2rad',
 'deg2rad_',
 'dequantize',
 'det',
 'detach',
 'detach_',
 'device',
 'diag',
 'diag_embed',
 'diagflat',
 'diagonal',
 'diff',
 'digamma',
 'dist',
 'distributed',
 'distributions',
 'div',
 'divide',
 'dll',
 'dll_path',
 'dll_paths',
 'dlls',
 'dot',
 'double',
 'dropout',
 'dropout_',
 'dsmm',
 'dsplit',
 'dstack',
 'dtype',
 'e',
 'eig',
 'einsum',
 'embedding',
 'embedding_bag',
 'embedding_renorm_',
 'empty',
 'empty_like',
 'empty_quantized',
 'empty_strided',
 'enable_grad',
 'eq',
 'equal',
 'erf',
 'erf_',
 'erfc',
 'erfc_',
 'erfinv',
 'exp',
 'exp2',
 'exp2_',
 'exp_',
 'expm1',
 'expm1_',
 'eye',
 'fake_quantize_per_channel_affine',
 'fake_quantize_per_tensor_affine',
 'fbgemm_linear_fp16_weight',
 'fbgemm_linear_fp16_weight_fp32_activation',
 'fbgemm_linear_int8_weight',
 'fbgemm_linear_int8_weight_fp32_activation',
 'fbgemm_linear_quantize_weight',
 'fbgemm_pack_gemm_matrix_fp16',
 'fbgemm_pack_quantized_matrix',
 'feature_alpha_dropout',
 'feature_alpha_dropout_',
 'feature_dropout',
 'feature_dropout_',
 'fft',
 'fill_',
 'finfo',
 'fix',
 'fix_',
 'flatten',
 'flip',
 'fliplr',
 'flipud',
 'float',
 'float16',
 'float32',
 'float64',
 'float_power',
 'floor',
 'floor_',
 'floor_divide',
 'fmax',
 'fmin',
 'fmod',
 'fork',
 'frac',
 'frac_',
 'frexp',
 'frobenius_norm',
 'from_dlpack',
 'from_file',
 'from_numpy',
 'frombuffer',
 'full',
 'full_like',
 'functional',
 'fused_moving_avg_obs_fake_quant',
 'futures',
 'gather',
 'gcd',
 'gcd_',
 'ge',
 'geqrf',
 'ger',
 'get_autocast_cpu_dtype',
 'get_autocast_gpu_dtype',
 'get_default_dtype',
 'get_device',
 'get_file_path',
 'get_num_interop_threads',
 'get_num_threads',
 'get_rng_state',
 'glob',
 'gradient',
 'greater',
 'greater_equal',
 'grid_sampler',
 'grid_sampler_2d',
 'grid_sampler_3d',
 'group_norm',
 'gru',
 'gru_cell',
 'gt',
 'half',
 'hamming_window',
 'hann_window',
 'hardshrink',
 'has_cuda',
 'has_cudnn',
 'has_lapack',
 'has_mkl',
 'has_mkldnn',
 'has_mlc',
 'has_openmp',
 'has_spectral',
 'heaviside',
 'hinge_embedding_loss',
 'histc',
 'histogram',
 'hsmm',
 'hsplit',
 'hspmm',
 'hstack',
 'hub',
 'hypot',
 'i0',
 'i0_',
 'igamma',
 'igammac',
 'iinfo',
 'imag',
 'import_ir_module',
 'import_ir_module_from_buffer',
 'index_add',
 'index_copy',
 'index_fill',
 'index_put',
 'index_put_',
 'index_select',
 'inf',
 'inference_mode',
 'init_num_threads',
 'initial_seed',
 'inner',
 'instance_norm',
 'int',
 'int16',
 'int32',
 'int64',
 'int8',
 'int_repr',
 'inverse',
 'is_anomaly_enabled',
 'is_autocast_cache_enabled',
 'is_autocast_cpu_enabled',
 'is_autocast_enabled',
 'is_complex',
 'is_conj',
 'is_distributed',
 'is_floating_point',
 'is_grad_enabled',
 'is_inference',
 'is_inference_mode_enabled',
 'is_loaded',
 'is_neg',
 'is_nonzero',
 'is_same_size',
 'is_signed',
 'is_storage',
 'is_tensor',
 'is_vulkan_available',
 'is_warn_always_enabled',
 'isclose',
 'isfinite',
 'isin',
 'isinf',
 'isnan',
 'isneginf',
 'isposinf',
 'isreal',
 'istft',
 'jit',
 'kaiser_window',
 'kernel32',
 'kl_div',
 'kron',
 'kthvalue',
 'last_error',
 'layer_norm',
 'layout',
 'lcm',
 'lcm_',
 'ldexp',
 'ldexp_',
 'le',
 'legacy_contiguous_format',
 'lerp',
 'less',
 'less_equal',
 'lgamma',
 'linalg',
 'linspace',
 'load',
 'lobpcg',
 'log',
 'log10',
 'log10_',
 'log1p',
 'log1p_',
 'log2',
 'log2_',
 'log_',
 'log_softmax',
 'logaddexp',
 'logaddexp2',
 'logcumsumexp',
 'logdet',
 'logical_and',
 'logical_not',
 'logical_or',
 'logical_xor',
 'logit',
 'logit_',
 'logspace',
 'long',
 'lstm',
 'lstm_cell',
 'lstsq',
 'lt',
 'lu',
 'lu_solve',
 'lu_unpack',
 'manual_seed',
 'margin_ranking_loss',
 'masked_fill',
 'masked_scatter',
 'masked_select',
 'matmul',
 'matrix_exp',
 'matrix_power',
 'matrix_rank',
 'max',
 'max_pool1d',
 'max_pool1d_with_indices',
 'max_pool2d',
 'max_pool3d',
 'maximum',
 'mean',
 'median',
 'memory_format',
 'merge_type_from_type_comment',
 'meshgrid',
 'min',
 'minimum',
 'miopen_batch_norm',
 'miopen_convolution',
 'miopen_convolution_transpose',
 'miopen_depthwise_convolution',
 'miopen_rnn',
 'mkldnn_adaptive_avg_pool2d',
 'mkldnn_convolution',
 'mkldnn_convolution_backward_weights',
 'mkldnn_linear_backward_weights',
 'mkldnn_max_pool2d',
 'mkldnn_max_pool3d',
 'mm',
 'mode',
 'moveaxis',
 'movedim',
 'msort',
 'mul',
 'multinomial',
 'multiply',
 'multiprocessing',
 'mv',
 'mvlgamma',
 'name',
 'nan',
 'nan_to_num',
 'nan_to_num_',
 'nanmean',
 'nanmedian',
 'nanquantile',
 'nansum',
 'narrow',
 'narrow_copy',
 'native_batch_norm',
 'native_group_norm',
 'native_layer_norm',
 'native_norm',
 'ne',
 'neg',
 'neg_',
 'negative',
 'negative_',
 'nextafter',
 'nn',
 'no_grad',
 'nonzero',
 'norm',
 'norm_except_dim',
 'normal',
 'not_equal',
 'nuclear_norm',
 'numel',
 'nvtoolsext_dll_path',
 'ones',
 'ones_like',
 'onnx',
 'ops',
 'optim',
 'orgqr',
 'ormqr',
 'os',
 'outer',
 'overrides',
 'package',
 'pairwise_distance',
 'parse_ir',
 'parse_schema',
 'parse_type_comment',
 'path_patched',
 'pca_lowrank',
 'pdist',
 'per_channel_affine',
 'per_channel_affine_float_qparams',
 'per_channel_symmetric',
 'per_tensor_affine',
 'per_tensor_symmetric',
 'permute',
 'pfiles_path',
 'pi',
 'pinverse',
 'pixel_shuffle',
 'pixel_unshuffle',
 'platform',
 'poisson',
 'poisson_nll_loss',
 'polar',
 'polygamma',
 'positive',
 'pow',
 'prelu',
 'prepare_multiprocessing_environment',
 'preserve_format',
 'prev_error_mode',
 'prod',
 'profiler',
 'promote_types',
 'put',
 'py_dll_path',
 'q_per_channel_axis',
 'q_per_channel_scales',
 'q_per_channel_zero_points',
 'q_scale',
 'q_zero_point',
 'qint32',
 'qint8',
 'qr',
 'qscheme',
 'quantile',
 'quantization',
 'quantize_per_channel',
 'quantize_per_tensor',
 'quantized_batch_norm',
 'quantized_gru',
 'quantized_gru_cell',
 'quantized_lstm',
 'quantized_lstm_cell',
 'quantized_max_pool1d',
 'quantized_max_pool2d',
 'quantized_rnn_relu_cell',
 'quantized_rnn_tanh_cell',
 'quasirandom',
 'quint4x2',
 'quint8',
 'rad2deg',
 'rad2deg_',
 'rand',
 'rand_like',
 'randint',
 'randint_like',
 'randn',
 'randn_like',
 'random',
 'randperm',
 'range',
 'ravel',
 'read_vitals',
 'real',
 'reciprocal',
 'reciprocal_',
 'relu',
 'relu_',
 'remainder',
 'renorm',
 'repeat_interleave',
 'res',
 'reshape',
 'resize_as_',
 'resize_as_sparse_',
 'resolve_conj',
 'resolve_neg',
 'result_type',
 'rnn_relu',
 'rnn_relu_cell',
 'rnn_tanh',
 'rnn_tanh_cell',
 'roll',
 'rot90',
 'round',
 'round_',
 'row_stack',
 'rrelu',
 'rrelu_',
 'rsqrt',
 'rsqrt_',
 ...]

可以看到,dir(torch) 返回了一个长长的列表,里面包含了 torch 包中所有可用的属性、函数和子模块名称。虽然内容很多,但通过它我们能快速了解这个包的整体结构。

4. 两大法宝的适用场景

  • 探索新库 :拿到一个陌生的库,先用 dir() 看它有哪些模块和函数,再用 help() 逐个了解关键函数的用法。
  • 快速回忆 :写代码时忘了某个函数的参数,用 help() 立刻查看文档。
  • 检查环境 :结合 dir() 和 help(),可以快速确认某个功能在当前环境中是否可用(例如 torch.cuda.is_available())。

5. 总结

dir() 与 help() 是 Python 中最基础也最实用的两个内置函数。它们不需要额外安装,却能极大提升我们探索代码的效率。无论是初学者还是资深开发者,掌握这两大法宝都能让开发过程事半功倍。

下次遇到陌生的库时,不妨先 dir() 一下,再 help() 一下,你会发现 Python 的世界其实并不神秘。

相关推荐
benchmark_cc1 小时前
实时行情系统如何避免无意义的重复请求?从请求去重到缓存设计
大数据·开发语言·python·pandas·量化交易·股票数据·quantdash
郝学胜-神的一滴1 小时前
Python浏览器自动化:Selenium与Playwright实战对比,网页爬虫&自动操作一站式指南
开发语言·爬虫·python·selenium·程序人生·自动化
Zip-List1 小时前
工作小记-pytorch的算子优化: 转gpu核函数 python调c
c语言·c++·pytorch·python·cuda
隐擎fox1 小时前
解密 BGP Anycast 边缘路由与跨国链路质量检测:多租户网络出口的低时延与防丢包架构实战
网络·python·网络协议·tcp/ip·网络安全·架构·tcpdump
土豆.exe1 小时前
chunked 编码的行尾:Go、h11 与 Tomcat 各错在哪一处
开发语言·网络安全·golang·tomcat
磊 子1 小时前
什么是虚假唤醒(spurious wakeup)?从 POSIX 标准讲到 futex 内核
java·开发语言
把我格子衫拿来1 小时前
手眼标定:相机与机械臂如何建立坐标关系?从 AX=XB 到 OpenCV 实践
python·opencv·机器人·手眼标定·坐标变换
飘然生1 小时前
traceId链路 skywalking java agent
java·开发语言·skywalking
li星野1 小时前
【学习记录】射线补偿原理与实现:从物理模型到MATLAB代码
开发语言·学习·matlab