【问题标题】:What does a dot after function and variable mean in python? [duplicate]python中函数和变量后面的点是什么意思? [复制]
【发布时间】:2022-11-04 22:00:56
【问题描述】:

我正在查看这些属于视频字幕项目的 data_loader.py 的 python 代码行:

fpath = self.C.loader.phase_video_feat_fpath_tpl.format(self.C.corpus, model, self.phase)
.
.
if len(feats) < self.C.loader.frame_max_len:

我是 oop 的新手,( C ,loader,phase_video_feat_fpath_tpl,...) 是什么意思。理解类、功能及其属性之间关系的最佳方法是什么? data_loader.py 的其余代码是:

from collections import defaultdict

import h5py
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader, RandomSampler
from torchvision import transforms

from loader.transform import UniformSample

class CustomVocab(object):
    def __init__(self, caption_fpath, init_word2idx, min_count=1, transform=str.split):
        self.caption_fpath = caption_fpath
        self.min_count = min_count
        self.transform = transform
 
        self.n_words = self.n_vocabs
        self.max_sentence_len = -1

        self.build()

 

class CustomDataset(Dataset):
    """ Dataset """

    def __init__(self, C, phase, caption_fpath, transform_frame=None, transform_caption=None):
        self.C = C
        self.phase = phase
        self.caption_fpath = caption_fpath
        self.transform_frame = transform_frame
        self.transform_caption = transform_caption
 

    def load_video_feats(self):
        for model in self.C.feat.models:
            fpath = self.C.loader.phase_video_feat_fpath_tpl.format(self.C.corpus, model, self.phase)

            fin = h5py.File(fpath, 'r')
            for vid in fin.keys():
                feats = fin[vid].value

                # Fix the number of frames for each video
                if len(feats) < self.C.loader.frame_max_len:
                    num_paddings = self.C.loader.frame_max_len - len(feats)
                    feats = feats.tolist() + [ np.zeros_like(feats[0]) for _ in range(num_paddings) ]
                    feats = np.asarray(feats)
                else:
                    feats = feats[:self.C.loader.frame_max_len]
                assert len(feats) == self.C.loader.frame_max_len

               
 

  
 

【问题讨论】:

  • 它们都是属性访问。您应该花更多时间处理the tutorial

标签: python function class


【解决方案1】:

在 Python 中,一切都是对象。数字、字符串、列表、字典... 此外,每个对象都有自己的方法和变量。这些点代表常量或方法。例如,我相信你已经在 python 中看到过类似的东西:

l = [1, 2, 3]
l.append(4)

append 是属于列表类的方法。在你的例子中, self.C.loader.frame_max_len 表示: 从当前实例中使用的变量C(由self表示)中取出变量loader中的frame_max_len

对于self.C.loader.phase_video_feat_fpath_tpl.format(self.C.corpus, model, self.phase),它的工作原理相同,但这里format 是一个方法——一个属于该类的函数。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2018-05-15
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多