一些常用的用法

Python的一些我没见过的用法,写一篇博客记录一下。

字典
kwargs

在 Python 中,kwargs 是一个通常用于表示关键字参数的字典。它通常在函数定义中用于接收传递给函数的任意数量的关键字参数。

当在函数调用时,使用关键字参数传递参数给函数时,这些关键字参数会被收集到一个字典中,并传递给函数内部。这个字典的名称通常被称为 kwargs(keyword arguments 的缩写)。

在函数定义中,**kwargs 的语法用于接收这些关键字参数,并将它们收集到一个字典中。这个字典中的键是参数的名称,值是传递给函数的对应参数的值。

例如,以下是一个使用了 kwargs 的函数定义的示例:

def example_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

# 调用函数并传递关键字参数
example_function(a=1, b=2, c=3)

在这个示例中,**kwargs 表示接收任意数量的关键字参数,并将它们收集到一个字典中。当调用 example_function() 函数并传递关键字参数时,这些参数会被收集到 kwargs 字典中,并在函数内部使用。

get方法

以该代码为例:

ema = kwargs.get('ema', None)

在给定的代码中,kwargs.get('ema', None) 是 Python 中的字典方法 get() 的使用示例。

get() 方法用于从字典中获取指定键的值,并在指定键不存在时返回默认值。

具体来说,kwargs.get('ema', None) 的作用是从 kwargs 字典中获取键为 ‘ema’ 的值,如果该键存在,则返回对应的值;如果该键不存在,则返回 None。

这种用法常用于处理函数参数中的可选项,如果调用者没有提供特定的参数,则使用默认值。在给定的代码中,ema 变量将被赋值为 ‘ema’ 参数的值,如果 ‘ema’ 参数不存在,则 ema 变量将被赋值为 None。

遍历
遍历字典

在 Python 中,遍历字典有多种方法,常用的包括使用 for 循环、字典的 items() 方法和字典的 keys() 方法。下面分别介绍这些方法:

使用 for 循环:

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict:
    print(key, my_dict[key])

在这个示例中,for 循环遍历字典 my_dict 中的每个键,然后可以通过键获取对应的值。

使用字典的 items() 方法:


my_dict = {'a': 1, 'b': 2, 'c': 3}

for key, value in my_dict.items():
    print(key, value)

在这个示例中,items() 方法返回字典中的键值对,for 循环可以同时遍历键和值。

使用字典的 keys() 方法:

my_dict = {'a': 1, 'b': 2, 'c': 3}

for key in my_dict.keys():
    print(key, my_dict[key])

在这个示例中,keys() 方法返回字典中的键,for 循环遍历键,并通过键获取对应的值。

通常推荐使用 items() 方法,因为它能够同时获取键和值,具有更高的效率。
两种方式是等价的
即:my_dict.items() 和 dict.items(my_dict)

列表生成式

列表生成式是一种简洁而强大的语法,用于根据一定规则快速生成列表。它的基本语法如下:

[expression for item in iterable]

其中:

expression 是对每个迭代元素进行操作的表达式,可以是任何合法的 Python 表达式。
item 是迭代过程中的每个元素,可以在表达式中使用。
iterable 是可迭代对象,可以是列表、元组、集合、字典等。
列表生成式还可以包含条件语句,使其具有更强的灵活性,其一般形式如下:

[expression for item in iterable if condition]

其中:

condition 是一个布尔表达式,用于过滤迭代元素。只有满足条件的元素才会被包含在生成的列表中。
举个例子,以下列表生成式生成一个包含 1 到 10 中每个整数的平方的列表:

squares = [x**2 for x in range(1, 11)]

这个列表生成式的含义是,在 1 到 10 的范围内遍历每个整数 x,对每个整数求平方,并将结果组成一个新的列表。其效果与以下的 for 循环等价:

squares = []
for x in range(1, 11):
    squares.append(x**2)

列表生成式的语法简洁明了,通常用于替代普通的 for 循环。

字典生成式

Python 中也有字典生成式,它与列表生成式类似,用于快速创建字典。字典生成式的基本语法如下:

{key_expression: value_expression for item in iterable}

其中:

key_expression 是对每个迭代元素生成字典键的表达式。
value_expression 是对每个迭代元素生成字典值的表达式。
item 是迭代过程中的每个元素,可以在表达式中使用。
iterable 是可迭代对象,可以是列表、元组、集合等。
字典生成式还可以包含条件语句,其一般形式如下:

{key_expression: value_expression for item in iterable if condition}

其中:

condition 是一个布尔表达式,用于过滤迭代元素。只有满足条件的元素才会被包含在生成的字典中。
举个例子,以下字典生成式生成一个包含 1 到 5 中每个整数及其平方的键值对字典:

squares_dict = {x: x**2 for x in range(1, 6)}

这个字典生成式的含义是,在 1 到 5 的范围内遍历每个整数 x,对每个整数分别求平方,并将结果作为值,整数本身作为键,组成一个新的字典。其效果与以下的 for 循环等价:

squares_dict = {}
for x in range(1, 6):
    squares_dict[x] = x**2

字典生成式与列表生成式一样,也是一种简洁而强大的语法,可以大大简化代码,提高代码的可读性和简洁性。
在一些情况下,字典生成式和列表生成式可以套用:

targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
一些操作
解包操作符

有如下代码

log_stats = {**{f'train_{k}': v for k, v in train_stats.items()},
                        **{f'test_{k}': v for k, v in test_stats.items()},
                        'epoch': epoch,
                        'n_parameters': n_parameters}

这里两个*代表的是解包操作符,在给定的代码中,log_stats 是一个字典,通过两个解包操作符,将多个字典的键值对解包并合并到 log_stats 字典中。

具体来说,{f'train_{k}': v for k, v in train_stats.items()} {f'test_{k}': v for k, v in test_stats.items()} 是字典推导式,用于生成新的字典,其中每个键是原始字典中的键加上前缀 “train_” 或 “test_”,对应的值保持不变。

通过使用 ** 解包操作符,将这两个字典的键值对解包,并合并到 log_stats 字典中。这样做可以更方便地将多个字典合并成一个字典,并且能够避免创建额外的中间字典。

综上所述,这里的两个 ** 解包操作符用于将两个字典的键值对解包并合并到 log_stats 字典中,以便记录训练和测试的统计信息,以及其他一些信息,如 epoch 数和模型参数数量。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值