天道酬勤,学无止境

字典中的访问函数第 2 部分(Access Functions in Dictionary Part 2)

问题

作为这个问题的后续:我有 2 个看起来像这样的函数:

def abc(a,b):
    return a+b

def cde(c,d):
    return c+d

我想将它分配给这样的字典:

functions = {'abc': abc(a,b), 'cde': cde(c,d)}

我可以这样做,但它会在 'cde' 处中断:

functions = {'abc':abc, 'cde':cde}

functions_to_call = ['abc', 'cde']
for f in functions_to_call:
    a, b = 3, 4
    c, d = 1, 2
    if f in functions:
       functions[f](a, b)

另外,如果 cde 接受 3 个参数怎么办?

回答1

制作一个单独的args序列并使用 splat 运算符 ( * ):

>>> def ab(a,b):
...   return a + b
... 
>>> def cde(c,d,e):
...   return c + d + e
... 
>>> funcs = {'ab':ab, 'cde':cde}
>>> to_call = ['ab','cde']
>>> args = [(1,2),(3,4,5)]
>>> for fs, arg in zip(to_call,args):
...   print(funcs[fs](*arg))
... 
3
12

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 通过字典访问函数(Access Functions via Dictionary)
    问题 我有一个这样的功能: def abc(a,b): return a+b 我想将它分配给这样的字典: functions = {'abc': abc(a,b)} 问题是,在将其分配给字典时,由于尚未定义参数,因此出现错误: NameError: name 'a' is not defined 我会做显而易见的事情并提前定义参数,但我需要在循环中定义它们(然后根据在列表中定位它来调用函数),如下所示: functions_to_call = ['abc'] for f in functions_to_call: a=3 b=4 #This is supposed to locate and run the function from the dictionary if it is in the list of functions. if f in functions: functions[f] 回答1 我需要在循环中定义它们(然后根据在列表中定位它来调用函数) 那么简单地将函数对象保存在字典中有什么问题: functions = {'abc':abc} 然后在循环时将a和b应用于函数: functions_to_call = ['abc'] for f in functions_to_call: a, b = 3, 4 if f in functions: functions[f
  • Python - 检查作为字典一部分的列表中的值的便捷方法?(Python - Convenient way to check for a value in a list that is part of a dictionary?)
    问题 诚然,我没有对这个主题进行大量研究,但我正在努力快速完成某些事情。 我有一个以整数为键、以列表为值的字典。 以前,我使用简单的 if 语句检查字典中的列表: if(someList is in someDictionary.values()): someCode() #failure 但是,我意识到这对我正在做的事情是不正确的,我只想检查字典值中是否包含列表的第一个值,例如 if(someList[0] == someValueInDictionary[0]): someCode() #failure 我第一次尝试 if(someList[0] is in someDictionary.values()[0]): someCode() #failure 但这显然行不通。 因为 someDictionary.values() 本身就是一个列表。 我意识到我可以遍历所有要检查的值,例如 for list in someDictionary.values(): if(someList[0] == list[0]): someCode() #failure actualCode() #success 但这确实打乱了我的程序流程。 我是一名新的 Python 程序员,在 Java 方面最有经验,我试图在我的骨头中获得 Python 的简洁性和便利性
  • #IT明星不是梦#利用Python进行网站日志分析
    网站的访问日志是一个非常重要的文件,通过分析访问日志,能够挖掘出很多有价值的信息。本文介绍如何利用Python对一个真实网站的访问日志进行分析,文中将综合运用Python文件操作、字符串处理、列表、集合、字典等相关知识点。本文所用的访问日志access_log来自我个人的云服务器,大家可以从文末的附件中下载。 1.提取指定日期的日志 下面是一条典型的网站访问日志,客户端访问网站中的每个资源都会产生一条日志。 193.112.9.107 - - [25/Jan/2020:06:32:58 +0800] "GET /robots.txt HTTP/1.1" 404 208 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" 每条日志都由空格分隔为九部分,其中比较重要的是: 第1部分,193.112.9.107 ,客户端的IP地址。 第4部分,[25/Jan/2020:06:32:58 +0800],用户访问请求发生的时间。 第5部分,GET /robots.txt HTTP/1.1,客户端发来的HTTP请求报文首部的第一行信息。这部分采用“请求方法 请求资源 请求协议”的格式表示,是日志中最重要的部分。“GET /robots.txt HTTP/1.1
  • C#是否可以给我一个不变的字典?(Does C# have a way of giving me an immutable Dictionary?)
    问题 C#核心库中是否内置可以为我提供不可变字典的任何内容? 类似于Java的东西: Collections.unmodifiableMap(myMap); 只是为了澄清一下,我并不是要阻止键/值本身被更改,而只是希望字典的结构不会停止更改。 如果要调用IDictionary的任何mutator方法( Add, Remove, Clear ) Add, Remove, Clear我都会想快速而响亮地失败。 回答1 不,但是包装器是微不足道的: public class ReadOnlyDictionary<TKey, TValue> : IDictionary<TKey, TValue> { IDictionary<TKey, TValue> _dict; public ReadOnlyDictionary(IDictionary<TKey, TValue> backingDict) { _dict = backingDict; } public void Add(TKey key, TValue value) { throw new InvalidOperationException(); } public bool ContainsKey(TKey key) { return _dict.ContainsKey(key); } public ICollection<TKey>
  • 在Python中使用字典调用带有参数的函数(Calling functions with parameters using a dictionary in Python)
    问题 我正在制作一个程序,该程序具有一个主菜单,要求用户输入一个选项并将其存储在整数option1 ,该整数在字典options中查找。 然后运行相应的功能。 如果函数没有参数,则以下代码有效: options = {0 : FunctionZero, # Assign functions to the dictionary 1 : FunctionOne, 2 : FunctionTwo, 3 : FunctionThree} options[option1]() # Call the function 如果函数具有参数,则上面的代码不起作用,因为()部分假定函数没有参数,但是我尝试了以下操作,该函数将函数的名称和参数存储在字典中的元组中: options = {0 : (FunctionZero,""), # FunctionsZero, FunctionOne 1 : (FunctionOne,""), # and FunctionTwo have no parameters 2 : (FunctionTwo,""), 3 : (FunctionThree,True)} # FunctionThree has one parameter if options[option1][1] == "": # Call the function options[option1][0](
  • 是否可以将函数存储在字典中?(Is it possible to store functions in a dictionary?)
    问题 我有一条消息进入我的 C# 应用程序,它是一个序列化为 JSON 的对象,当我反序列化它时,我有一个“名称” string和一个“有效负载” string[] ,我希望能够采用“名称”并在函数字典中查找它,使用“Payload”数组作为其参数,然后将输出返回给发送消息的客户端,这在 C# 中可能吗? 我在这里找到了一个堆栈溢出答案,其中第二部分似乎合理,但我不知道我在引用State 回答1 听起来你可能想要这样的东西: Dictionary<string, Func<string[], int>> functions = ...; 这是假设函数返回一个int (您尚未指定)。 所以你会这样称呼它: int result = functions[name](parameters); 或验证名称: Func<string[], int> function; if (functions.TryGetValue(name, out function)) { int result = function(parameters); ... } else { // No function with that name } 目前尚不清楚您尝试从何处填充functions ,但如果它是同一类中的方法,则可能有以下内容: Dictionary<string, Func<string[], int>
  • 不使用 try except 填充字典(fill a dictionary without using try except)
    问题 假设我有字典,我想用一些键和值填充它,第一个字典是空的,假设我需要这个字典作为计数器,例如计算字符串中的一些键,我有这种方式: myDic = {} try : myDic[desiredKey] += 1 except KeyError: myDic[desiredKey] = 1 或者有时值应该是一个列表,我需要将一些值附加到我这样的值列表中: myDic = {} try: myDic[desiredKey].append(desiredValue) except KeyError: myDic[desiredKey] = [] myDic[desiredKey].append(desiredValue) 是否有更好的替代方案(两者)不使用try except部分? 回答1 您可以使用collections.defaultdict() ,它允许您提供一个函数,每次访问丢失的键时都会调用该函数。 对于您的第一个示例,您可以将int作为缺失函数传递给它,该函数在第一次被访问时将被评估为 0。 对于第二个,您可以通过list 。 例子: from collections import defaultdict my_dict = defaultdict(int) >>> lst = [1,2,2,2,3] >>> for i in lst: ... my_dict[i]+=1
  • 在Python中访问字典中的任意元素(Access an arbitrary element in a dictionary in Python)
    问题 如果mydict不为空,则访问以下任意元素: mydict[mydict.keys()[0]] 有没有更好的方法可以做到这一点? 回答1 在Python 3上,非破坏性和迭代性地: next(iter(mydict.values())) 在Python 2上,非破坏性和迭代性地: mydict.itervalues().next() 如果希望它在Python 2和3中都可以使用,则可以使用以下six包: six.next(six.itervalues(mydict)) 尽管在这一点上它还是很神秘的,但我还是更喜欢您的代码。 如果要删除任何项目,请执行以下操作: key, value = mydict.popitem() 请注意,“ first”在此处可能不是合适的术语,因为在Python <3.6中, dict不是有序类型。 Python 3.6+ dicts是有序的。 回答2 如果您只需要访问一个元素(由于字典不能保证排序,则是第一个偶然的元素),您可以在Python 2中简单地做到这一点: my_dict.keys()[0] -> key of "first" element my_dict.values()[0] -> value of "first" element my_dict.items()[0] -> (key, value) tuple of "first"
  • 深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!
    英文:https://arpitbhayani.me/blogs/string-interning作者:arpit译者:豌豆花下猫(“Python猫”公众号作者)声明:本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动。每种编程语言为了表现出色,并且实现卓越的性能,都需要有大量编译器级与解释器级的优化。由于字符串是任何编程语言中不可或缺的一个部分,因此,如果有快速操作字符串的能力,就可以迅速地提高整体的性能。在本文中,我们将深入研究 Python 的内部实现,并了解 Python 如何使用一种名为字符串驻留(String Interning)的技术,实现解释器的高性能。 本文的目的不仅在于介绍 Python 的内部知识,而且还旨在使读者能够轻松地浏览 Python 的源代码;因此,本文中将有很多出自 CPython 的代码片段。全文提纲如下:(在 Python猫 公众号回复数字“0215”,下载思维导图)1、什么是“字符串驻留”?字符串驻留是一种编译器/解释器的优化方法,它通过缓存一般性的字符串,从而节省字符串处理任务的空间和时间。这种优化方法不会每次都创建一个新的字符串副本,而是仅为每个适当的不可变值保留一个字符串副本,并使用指针引用之。每个字符串的唯一拷贝被称为它的intern,并因此而得名 String Interning
  • 在 switch 字典中执行函数(Executing functions within switch dictionary)
    问题 把我开发的所有模块放到主程序中时遇到了问题。 我创建的开关字典可以在下面看到: def Tank_Shape_Calcs(Tank_Shape, level, area, dish, radius, length, Strapping_Table, Tank_Number): switcher = { 0: vertical.Vertical_Tank(level, area), 1: horiz.Horiz_Cylinder_Dished_Ends(dish, radius, level, length), 2: strapping.Calc_Strapped_Volume(Strapping_Table, level), 3: poly.Fifth_Poly_Calcs(Tank_Number) } return switcher.get(Tank_Shape, "ERROR: Tank type not valid") 坦克形状在主文件中设置为每个坦克的循环。 第一个坦克的Tank_Shape = 2所以我希望它执行Calc_Strapped_Volume()函数。 我已尝试对其进行测试,并且切换器功能肯定Tank_Shape读取为2 。 此外,如果我将函数更改为字符串,它将打印出正确的字符串。 问题是这些函数似乎是按顺序执行的,直到调用正确的函数。 这会导致错误
  • Swift:通过索引访问字典(Swift: dictionary access via index)
    问题 我想在我的 UITableViewCells 中使用字典中的值。 我可以通过使用 indexPath.row 作为值和 indexPath.section 作为键从字典中获取那些吗? 回答1 您可以像这样获取键数组并在indexPath.section获取键: Array(yourDictionary.keys)[indexPath.section] 您可以从 values 数组中获取indexPath.row处的值,如下所示: Array(yourDictionary.values)[indexPath.row] 编辑: 如果您想获取特定部分键的值,您应该编写: let key = Array(yourDictionary.keys)[indexPath.section] let array = yourDictionary[key] let value = array[indexPath.row] 回答2 字典本质上是无序的。 如果您使用dictionary.keys,您可以获得一个键数组并使用它,正如@Firas 在他/她的回答中所说的那样,但不能保证下次您获取一组键时它们的顺序相同。 另一种选择是使用 Int 作为键类型,然后使用 indexPath.row 作为键。 使用数组作为表视图的数据源确实更好。 如果要将分段表视图的值存储在字典中,则应使用外部部分数组
  • Python字典为什么快?为什么是无序的?
      最近在看Python数据结构,对字典有了新的认识,mark一下。   Python的数据类型,以列表和字典的使用最为广泛,其中列表以其强大的增删改查,备受人们的青睐,我个人也特别喜欢列表。但当列表数据过多时,需要查询第n个数据,其性能则为O(n),此时字典就登场了,以其强大的底层结构,可以做到查询为O(1),即常量查询,那原因是什么呢? 字典的底层结构   说到字典的底层结构,实际上是个散列表,那什么是散列表?实际上就是个稀疏数组(总是有空白元素的数组)。这里普及下数组的概念,数组最大的特点是 不管数组有多大,他访问第1项和访问最后一项所需的时间是相同的,原因是数组中的每个元素都有其对应的内存地址,每次存入时,会存入连续的内存地址(如图所示),一般默认第一项为基本地址,则 其他项都能通过基本地址+偏移量来读取,因此读第n项速度也为O(1)。但缺点是数组在定义时就规定了大小,所以后续的增加元素一旦达到了规定的阈值,则需要进行空间的扩容,而这个阈值一般是数组仅剩1/3空白占位时。 【表1-1】   回到字典,散列表的底层是稀疏数组,其内部元素单元称为表元,而表元则分为value和key,value可以是任意值,但key必须是散列值(相当于数组中元素的内存地址),那散列值的存在需要满足两个条件,其一是必须有__hash__魔法方法
  • 哈希查找或二进制搜索哪个更快?(Which is faster, Hash lookup or Binary search?)
    问题 当给定一个静态对象集(静态的,一旦改变就很少加载),需要对其进行重复并发查找以达到最佳性能,更好的情况是,是HashMap还是使用一些自定义比较器进行二进制搜索的数组? 答案是对象还是结构类型的函数? 哈希和/或相等函数性能? 哈希唯一性? 清单大小? Hashset大小/设置大小? 我正在查看的布景大小可能在500k到10m之间,以防信息有用。 当我在寻找C#答案时,我认为真正的数学答案不在于语言,因此我不包含该标记。 但是,如果有C#特定的事情要注意,则需要该信息。 回答1 好吧,我会尽量简短。 C#简短答案: 测试两种不同的方法。 .NET为您提供了通过一行代码来更改您的方法的工具。 否则,请使用System.Collections.Generic.Dictionary,并确保将其初始化为大容量作为初始容量,否则,由于GC必须执行收集旧存储区阵列的工作,因此您将在余下的时间里插入项目。 更长的答案: 哈希表具有ALMOST恒定的查找时间,并且在现实世界中访问哈希表中的项目并不仅仅需要计算哈希。 要获得某项,您的哈希表将执行以下操作: 获取密钥的哈希获取该哈希的存储桶编号(通常,地图函数看起来像此存储桶=哈希%bucketsCount) 遍历从该存储桶开始的项目链(基本上是共享相同存储桶的项目列表,大多数哈希表使用这种处理存储桶/哈希冲突的方法),并将每个键与您要添加
  • 通过Python中的函数访问字典的可变数量的键[重复](Variable number of keys to access dictionary through a function in Python [duplicate])
    问题 这个问题在这里已经有了答案: 任何遍历嵌套字典的函数式编程方法? (1 个回答) 6年前关闭。 此功能适用于两个键: def get(keyA, keyB) return mydict[keyA][keyB] 如何为可变数量的键编写以下函数? def get(*keys) return mydict[keys[0]][keys[1]][keys[3]]... 回答1 迭代键,并在迭代时分配项目: def get(*keys): ret = mydict for key in keys: ret = ret[key] return ret
  • sorted与.sort函数及sorted对字典或列表进行排序
    一、sorted与.sort函数 sorted 语法: sorted(iterable, key=None, reverse=False) 参数说明: iterable – 可迭代对象。 key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 实例 example_list = [5, 0, 6, 1, 2, 7, 3, 4] print(sorted(example_list, reverse=True)) # #[7, 6, 5, 4, 3, 2, 1, 0] .sort语法 list.sort(cmp=None, key=None, reverse=False) 参数说明 cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。 实例 def takeFirst(elem):#返回elem的第一个元素 return elem[0]
  • Python基础——Python语言家族
    在这里插入图片描述 一、Python语言家族 1 Introduction 1.1 Python 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 简单来说,Python是一门编程语言,帮助我们更好的与计算机沟通,功能全面、易学易用、可拓展语言,所以说,人生苦短,我学Python。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解释型高级语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python 是初学者的语言: Python 对初级程序员而言,是一种伟大的语言,开发代码量少,模块扩展库种类繁多,所以它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。 扩展:编译型与解释型的原理 编译型:编译器将源代码逐条编译成机器代码,任何一条语句 有错,都不能通过编译,最终形成目标代码,以后每次执行只执 行目标代码即可,因此执行速度快。解释型:解释器逐条解释源代码,成功一条就执行一 条,每次执行时都需要解释,所以速度稍慢
  • Python基础第一周--Python语言家族
    在这里插入图片描述 一、Python语言家族 1 Introduction 1.1 Python 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 简单来说,Python是一门编程语言,帮助我们更好的与计算机沟通,功能全面、易学易用、可拓展语言,所以说,人生苦短,我学Python。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解释型高级语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python 是初学者的语言: Python 对初级程序员而言,是一种伟大的语言,开发代码量少,模块扩展库种类繁多,所以它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。 扩展:编译型与解释型的原理 编译型:编译器将源代码逐条编译成机器代码,任何一条语句 有错,都不能通过编译,最终形成目标代码,以后每次执行只执 行目标代码即可,因此执行速度快。解释型:解释器逐条解释源代码,成功一条就执行一 条,每次执行时都需要解释,所以速度稍慢
  • 地图和字典有什么区别?(What is the difference between a map and a dictionary?)
    问题 我知道映射是将键映射到值的数据结构。 字典不一样吗? 地图和字典1有什么区别? 1.我不是要问用X或Y语言定义它们(这似乎是人们通常在SO上要求的语言),我想知道它们在理论上有什么区别。 回答1 关于同一件事的两个术语: Java,C ++使用“地图” .Net,Python使用“字典” PHP使用“关联数组” “映射”是正确的数学术语,但由于在函数式编程中具有单独的含义,因此可以避免使用“映射” 。 有些语言还使用其他术语(Javascript中的“ Object”,Ruby中的“ Hash”,Lua中的“ Table”) ,但是它们在编程中也都具有单独的含义,因此我避免使用它们。 有关更多信息,请参见此处。 回答2 一个是另一个的旧词。 通常,在使用数学术语“地图”之前先使用术语“字典”。 同样,字典通常具有字符串的键类型,但是并不是到处都是100%正确的。 回答3 计算机科学术语摘要: 字典是代表一组元素的数据结构,包括插入,删除和成员资格测试; 元素可以但不一定由不同的键和值部分组成映射是一种关联数据结构,能够存储一组键,每个键都与一个(或有时不止一个,例如C ++ multimap)值相关联,并且能够访问和擦除仅给定键的现有条目。 讨论 程序员已经在使用的特定语言或系统中看到了具有特定含义的术语,因此回答这个问题变得很复杂,但是这个问题要求“在理论上
  • 为什么检查字典是否包含键而不是捕获异常(如果没有包含键)会更快呢?(Why is it faster to check if dictionary contains the key, rather than catch the exception in case it doesn't?)
    问题 想象一下代码: public class obj { // elided } public static Dictionary<string, obj> dict = new Dictionary<string, obj>(); 方法1 public static obj FromDict1(string name) { if (dict.ContainsKey(name)) { return dict[name]; } return null; } 方法2 public static obj FromDict2(string name) { try { return dict[name]; } catch (KeyNotFoundException) { return null; } } 我很好奇这两个函数的性能是否有所不同,因为第一个函数应该比第二个函数慢-鉴于它需要两次检查字典是否包含值,而第二个函数确实只需要访问字典除了WOW,它实际上是相反的: 循环1000000个值(现有10万个和不存在90万个): 第一个功能:306毫秒第二功能:20483毫秒 这是为什么? 编辑:正如您可以在此问题下方的注释中注意到的那样,在有0个不存在的键的情况下,第二个函数的性能实际上比第一个更好。 但是,一旦至少有一个或多个不存在的密钥,第二个密钥的性能就会迅速下降。 回答1 一方面
  • 在python中的嵌套json字典中查找值(Find a value within nested json dictionary in python)
    问题 从以下 json 中,在 python 中,我想提取值“TEXT”。 除了未知之外,所有的键都是不变的。 未知可以是任何字符串,如“a6784t66”或“hobvp*nfe”。 未知的值是未知的,只是它会在每个 json 响应中的那个位置。 { "A": { "B": { "unknown": { "1": "F", "maindata": [ { "Info": "TEXT" } ] } } } } 一行json '{"A":{"B":{"unknown":{"1":"F","maindata":[{"Info":"TEXT"}]}}}}' 你将如何获得“文本”的价值? (我知道如何使用 json.loads 加载 json)。但我不确定如何获取“Text”的值。 谢谢。 (我不确定最好的标题是什么。) 回答1 它有点冗长,但在上面的例子中: In [1]: import json In [2]: s = """\ ...: { ...: "A": { ...: "B": { ...: "unknown": { ...: "1": "F", ...: "maindata": [ ...: { ...: "Info": "TEXT" ...: } ...: ] ...: } ...: } ...: } ...: }""" In [3]: data = json.loads(s