概述
1、[对(x)的操作 for x in 集合 if 条件],[对(x,y)的操作 for x in 集合1 for y in 集合2 if 条件]
举一个简单的例子:x=[1,2,3,4],y=[5,6,7,8],让着两个list中的偶数分别相加,应该结果2+6,4+6,2+8,4+8
下面用一句话来写:
[a + b for a in x for b in y if a%2 == 0 and b%2 ==0]
2、对yolo v5for语句解读:
for p in path if isinstance(path, list) else [path]: p = Path(p) # os-agnostic if p.is_dir(): # dir # 检测指定的文件是否是一个目录,如果是则返回TRUE、否则返回FALSE # 返回满足条件的文件列表 f += glob.glob(str(p / '**' / '*.*'), recursive=True) # f = list(p.rglob('**/*.*')) # pathlib elif p.is_file(): # file with open(p, 'r') as t: t = t.read().strip().splitlines() parent = str(p.parent) + os.sep f += [x.replace('./', parent) if x.startswith('./') else x for x in t] # local to global path # f += [p.parent / x.lstrip(os.sep) for x in t] else: raise Exception(f'{prefix}{p} does not exist')
所以无论怎么path都会变成list,之后在执行其他语句。
3、类中的__call__()方法:
重新定义__call__(),类对象就可以像函数一样调用,不用经过实例化。
# 重载运算符
def __call__(self, im, img2, labels, p=1.0):
if self.transform and random.random() < p:
new = self.transform(image=im, image1=img2, bboxes=labels[:, 1:], class_labels=labels[:, 0]) # transformed
# 转换为xywh归一化坐标
im, img2, labels = new['image'], new['image1'], np.array([[c, *b] for c, b in zip(new['class_labels'], new['bboxes'])])
可以直接通过类名使用函数的方法调用类。(比如P是一个类对象,你把这个call重写以后,你在下面像函数一样使用比如这样p(),会默认去执行里面的方法)不重写则不会调用该方法。
img, img2, labels = self.albumentations(img,img2, labels)
4、python中的三目运算符
True_statements if expression else False_statements
三目运算符的规则是:先对逻辑表达式expression求值,如果逻辑表达式返回True,则执行True_statement,如果逻辑表达式为返回值为False,则执行并返回False_statement的值。
如果只是在控制台上输出提示信息:则可以改为如下形式:
三目运算符中True_statements或False_statements种可以放置多条语句,一般有两种放置方式:
①:多条语句以英文逗号隔开,每条语句都会执行,程序返回多条语句的返回值组成的元组。
②:多条语句以英文分号隔开,每局都会执行,程序只会返回第一条语句的返回值。
以上两句代码会返回两条语句的返回值组成的元组,print()返回值为None,以上输出结果为:
(None, ‘a大于b’)
最后
以上就是幽默天空为你收集整理的for语句解析的全部内容,希望文章能够帮你解决for语句解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复