网站漂浮广告怎么做,网站设计一个版块,北京网站设计招聘,商丘公司做网站Python的一些我没见过的用法#xff0c;写一篇博客记录一下。
字典
kwargs
在 Python 中#xff0c;kwargs 是一个通常用于表示关键字参数的字典。它通常在函数定义中用于接收传递给函数的任意数量的关键字参数。
当在函数调用时#xff0c;使用关键字参数传递参数给函数…Python的一些我没见过的用法写一篇博客记录一下。
字典
kwargs
在 Python 中kwargs 是一个通常用于表示关键字参数的字典。它通常在函数定义中用于接收传递给函数的任意数量的关键字参数。
当在函数调用时使用关键字参数传递参数给函数时这些关键字参数会被收集到一个字典中并传递给函数内部。这个字典的名称通常被称为 kwargskeyword arguments 的缩写。
在函数定义中**kwargs 的语法用于接收这些关键字参数并将它们收集到一个字典中。这个字典中的键是参数的名称值是传递给函数的对应参数的值。
例如以下是一个使用了 kwargs 的函数定义的示例
def example_function(**kwargs):for key, value in kwargs.items():print(f{key}: {value})# 调用函数并传递关键字参数
example_function(a1, b2, c3)
在这个示例中**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 {**{ftrain_{k}: v for k, v in train_stats.items()},**{ftest_{k}: v for k, v in test_stats.items()},epoch: epoch,n_parameters: n_parameters}这里两个*代表的是解包操作符在给定的代码中log_stats 是一个字典通过两个解包操作符将多个字典的键值对解包并合并到 log_stats 字典中。
具体来说{ftrain_{k}: v for k, v in train_stats.items()} 和 {ftest_{k}: v for k, v in test_stats.items()} 是字典推导式用于生成新的字典其中每个键是原始字典中的键加上前缀 “train_” 或 “test_”对应的值保持不变。
通过使用 ** 解包操作符将这两个字典的键值对解包并合并到 log_stats 字典中。这样做可以更方便地将多个字典合并成一个字典并且能够避免创建额外的中间字典。
综上所述这里的两个 ** 解包操作符用于将两个字典的键值对解包并合并到 log_stats 字典中以便记录训练和测试的统计信息以及其他一些信息如 epoch 数和模型参数数量。