一些常用的用法

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 数和模型参数数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang kafka sarama 源码解析

消费者组重平衡 github.com/!shopify/saramav1.27.2/consumer_group.go func (c *consumerGroup) newSession(ctx context.Context, topics []string, handler ConsumerGroupHandler, retries int) (*consumerGroupSession, error) {// 获取broker组协调器coordinator, err :…

爱普生EPSON全新传感技术方案亮相高交会,创造新时代“精智生活”

2023年中国国际高新技术成果交易会在深圳福田会展中心盛大举行,是目前中国规模最大、最具影响力的科技类展会之一。爱普生作为始终坚持“科技本地化”战略的技术创新前沿企业参与此次展会,为中国用户带来爱普生电子元器件三款创新技术与四大成熟传感器解…

Python 将HTML转为PDF、图片、XML、XPS格式

网页内容是信息传播的主要形式之一。在Web开发中,有时候我们需要将HTML文件以不同的格式保存或分享,比如PDF、图片(如PNG或JPEG)、XML或XPS等。这些格式各有优势,适合不同的用途。在这篇文章中,我们将介绍如…

51单片机入门:定时器

定时器的介绍 定时器:51单片机的定时器属于单片机的内部资源,其电路的设计连接和运转均在单片机内部完成。根据单片机内部的时钟或者外部的脉冲信号对寄存器中的数据加1,定时器实质就是加1计数器。因为又可以定时又可以计数,又称…

Apipost智能Mock功能详解

在接口开发过程中,Mock功能可以帮助开发者快速测试和验证接口的正确性和稳定性,以便快速迭代和修复问题。Apipost推出智能Mock功能,可以在智能期望中填写一些触发条件,开启后,Apipost会根据已设置的触发条件&#xff0…

python食品安全信息管理系统flask-django-nodejs-php

。 食品安全信息管理系统是在安卓操作系统下的应用平台。为防止出现兼容性及稳定性问题,编辑器选择的是Hbuildex,安卓APP与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进食品安全信…

Day43:WEB攻防-PHP应用SQL注入符号拼接请求方法HTTP头JSON编码类

目录 PHP-MYSQL-数据请求类型 PHP-MYSQL-数据请求方法 PHP-MYSQL-数据请求格式 知识点: 1、PHP-MYSQL-SQL注入-数据请求类型 2、PHP-MYSQL-SQL注入-数据请求方法 3、PHP-MYSQL-SQL注入-数据请求格式 PHP-MYSQL-数据请求类型 SQL语句由于在黑盒中是无法预知写法的…

大模型分布式推理ray

一、目录 1 框架 2. 入门 3. 安装教程 4. 相关文档、案例阅读 二、实现 1 框架:Ray:将一个模型拆分到多个显卡中,实现分布式预测、训练等功能。 2. 入门 : 案例:通过ray 实现分布式部署,分布式推理服务。…

python拍卖行系统的设计与实现flask-django-nodejs-php

此系统设计主要采用的是python语言来进行开发,采用django/flask框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一…

排序算法记录(冒泡+快排+归并)

文章目录 前言冒泡排序快速排序归并排序 前言 冒泡 快排 归并,这三种排序算法太过经典,但又很容易忘了。虽然一开始接触雀氏这些算法雀氏有些头大,但时间长了也还好。主要是回忆这些算法干了啥很耗时间。 如果在笔试时要写一个o(nlogn)的…

408学习笔记-17-C-C/C++中程序内存区域划分

C/C中程序内存区域划分 C/C程序内存分配的几个区域: 1、栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高…

基于python+vue拍卖行系统的设计与实现flask-django-nodejs-php

拍卖行系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,拍卖行…

前端小白的学习之路(ES6 三)

提示:类:class, 模块化:modules(基本概念) 目录 一、类class 1.声明类 2.类的继承 3.类的静态成员 4.私有属性 二、模块化(基本) 1.定义组件与引入组件 2.书写方式 1) 按需导出导入 2) 全部导出导入 3) 设置模块的别名 一、类class 在 ECMAS…

Flink:维表 Join 难点和技术方案汇总

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

线性表的顺序表示(顺序表)

静态分配&#xff1a; #include <stdbool.h> #include <stdio.h>typedef int ElementType;#define MaxSize 50 typedef struct {ElementType data[MaxSize];int length; }SqList;//初始化 //SqList L; void InitList(SqList L) {L.length 0; }//插入 bool ListIn…

主机OS/390汇编程序入门篇

主机OS/390 汇编程序曾经风靡一时。它曾应用于很多商业应用系统&#xff0c;特别是联机应用系统。随着高级语言的普及&#xff0c;以及计算机硬件资源的成本日趋下降&#xff0c;汇编语言不再是人们开发的首选&#xff0c;但是汇编语言还是有它的优点&#xff0c;现在仍然有着它…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十一&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十三&#xff09; 48、sqlite3_stmt_isexplain sqlite3_stmt_is…

2024蓝桥杯每日一题(单调队列)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;单调栈 试题二&#xff1a;滑动窗口 试题三&#xff1a;子矩阵 试题四&#xff1a;最大子序和 试题一&#xff1a;单调栈 【题目描述】 给定一个长度为 N 的整数数列&#xff0c;输出每…

jvm提供的远程调试 简单使用

JVM自带远程调试功能 JVM远程调试&#xff0c;其实是两个虚拟机之间&#xff0c;通过socket通信&#xff0c;达到远程调试的目的&#xff1b; 前提 确保本地和远程的网络是开通的&#xff1b; 本地操作 远程操作 在启动命令参数中 把上面的内容复制进去

【3GPP】【核心网】【4G】4G手机接入过程,手机附着过程(超详细)

1. 4G手机接入过程&#xff0c;手机附着过程 附着&#xff08;Attach&#xff09;&#xff1a; 终端在PLMN中注册&#xff0c;从而建立自己的档案&#xff0c;即终端上下文 进行附着的三种情况&#xff1a; ①终端开机后的附着&#xff0c;初始附着 ②终端从覆盖盲区返回到…