热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是Perl相当于Python的dict.get(键,默认)?

如何解决《什么是Perl相当于Python的dict.get(键,默认)?》经验,为你挑选了2个好方法。

Python的Perl哈希的对应物是dict(字典)对象.

如果d是Python dict,那么表达式

d.get(key, default)

...评估d[key]是否存在,default否则.

除了三元表达之外,Perl是否对同一个想法有任何支持

exists $h{$key} ? $h{$key} : $default



1> Sinan Ünür..:

Perl 5.10引入了定义或运算符//.你可以写:

$h{$key} // $default

//经营者具有相同的优先级和结合的||.我们已经特别注意确保这个操作符"尽你所能"而不破坏旧代码,但是涉及空正则表达式的一些边缘情况现在可能会以不同的方式进行解析.

正如@Borodin在评论中指出的那样,这不会区分存在的哈希键映射到未定义的值与哈希中根本不存在的键.

模块Hash :: DefaultValue可能对此有所帮助.但是,虽然默认值可以是coderef,但似乎并不直观地允许每次访问的任意默认值.另一个类似的模块是Hash :: WithDefaults.

你也可以使用

[$default, $h{$key}]->[exists $h{$key}]

但这并不比三元表达更有效,更好看.当然,你可以自己动手代替:

use strict;
use warnings;

sub get_value_or_default(\%$$) {
    exists $_[0]->{$_[1]} ? $_[0]->{$_[1]} : $_[2];
}

my %hash = ( a => 1 );

print get_value_or_default(%hash, b => 33), "\n";
print get_value_or_default(%hash, b => 75), "\n";
print get_value_or_default(%hash, c => 96), "\n";

如果您喜欢冒险,可以将其写成:

use v5.24;
use warnings;

use feature 'signatures';
no warnings 'experimental::signatures';

sub get_value_or_default($hash, $key, $default) : prototype(\%$$) {
    exists $hash->{$key} ? $hash->{$key} : $default;
}

您没有为您的请求提供上下文,但Perl中设置默认值的常用方法是从另一个源读取的值被覆盖使用该构造:

my %cOnfig= (%$default_config, %{ get_config(...) });


除了可能存在值为"undef"的哈希元素.如果OP真的需要检查一个不存在的元素然后定义 - 或者不够.

2> dgw..:

您可以使用已知的三元表达式

my $value_or_default = exists $h{$key} ? $h{$key} : $default

要么

my $value_or_default = $h{$key} // $default ;

//定义或操作者.

如果要交换到已定义或运算符,则取决于您的数据和需求.不同之处在于,当您拥有一个未定义值的键时,您将获得不同的结果.

my %hash = ( key1 => undef ,
             key3 => 1 ) ;
my $default = 42 ;

foreach my $test ( qw(key1 key2 key3) ) {
  printf "%s => %s exists\n%s => %s defined-or\n\n" ,
         $test ,
         exists $hash{$test} ? $hash{$test} : $default ,
         $test ,
         $hash{$test} // $default ;
}

这导致:

Use of uninitialized value $hash{"key1"} in printf at x.pl line 11.
key1 =>  exists
key1 => 42 defined-or

key2 => 42 exists
key2 => 42 defined-or

key3 => 1 exists
key3 => 1 defined-or

对于key1,密钥存在但值未定义,因此perl发出警告.


推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • Java集合详解5:深入理解LinkedHashMap和LRU缓存
    Java集合详解5:深入理解LinkedHashMap和LRU缓存今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存。具体代码在我的 ... [详细]
  • HashTable与ConcurrentHashMap均可实现HashMap的功能,对外提供了键值对存储的数据结构。但是在内部结构及实现上有何区别,性能上的差异到底在哪里又是如何导致的 ... [详细]
  • 我找到了这篇有关在Typescript中实现哈希图的帖子,除了从哈希图中删除某些内容 ... [详细]
  • 本篇文章给大家分享的是有关Java中怎么对HashMap按键值排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话 ... [详细]
  • 将学生对象和学生的归属地通过键与值存储到map集合中。importjava.util.HashMap;importjava.util.Iterator;importjava.uti ... [详细]
  • 01Map集合概述A:Map集合概述:我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同a:Collection中的集合 ... [详细]
  • 手写HashMap,快手面试官直呼内行
    手写HashMap,快手面试官直呼内行-手写HashMap?这么狠,面试都卷到这种程度了?第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章:这……我当 ... [详细]
  • 在Java中有多种遍历HashMap的方法,注意Java中所有的Map类型都实现了共有的Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,Linked ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
author-avatar
沉沦850
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有