小编dan*_*tra的帖子

这个特定的Python函数组合背后的逻辑是什么?

请考虑以下有关函数组合的Python代码段:

from functools import reduce
def compose(*funcs):
    # compose a group of functions into a single composite (f(g(h(..(x)..)))
    return reduce(lambda f, g: lambda *args, **kwargs: f(g(*args, **kwargs)), funcs)


### --- usage example:
from math import sin, cos, sqrt
mycompositefunc = compose(sin,cos,sqrt)
mycompositefunc(2)
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 有人可以解释一下compose"操作逻辑"吗?(这个怎么运作?)
  2. 是否可以(以及如何?)在不使用reduce情况下获得相同的东西?

我已经看过这里,这里这里,我的问题是明白是什么lambda意思或reduce做(例如,我认为我2在使用示例中将有点是funcs要编写的第一个元素).我发现更难理解的是两者如何lambda组合/嵌套并在*args, **kwargs这里作为reduce第一个参数混合的复杂性......


编辑:

首先,@ Martijn和@Borealid,感谢您的努力和答案以及您献给我的时间.(抱歉延误,我在业余时间这样做,并不总是有很多......)

好的,现在来看看事实......

关于我的问题的第1点: …

python function composition

7
推荐指数
1
解决办法
232
查看次数

是否存在追加和插入的原因?

我肯定不是我想成为的Python大师,而且我主要是在业余时间学习/试验,很可能我会为有经验的用户提出一个微不足道的问题...但是,我真的很想要理解,这是一个帮助我很多的地方.

现在,在适当的前提下,Python文档说:

4.6.3.可变序列类型

s.append(x)将x附加到序列的末尾(与s [len(s):len(s)] = [x]相同)

[...]

s.insert(i,x)在i给出的索引处将x插入s(与s [i:i] = [x]相同)

此外:

5.1.更多关于列表

list.append(x)将项添加到列表的末尾.相当于[len(a):] = [x].

[...]

list.insert(i,x)在给定位置插入一个项目.第一个参数是要插入的元素的索引,因此a.insert(0,x)插入列表的前面,而a.insert(len(a),x)等同于a.append( x).

所以现在我想知道为什么有两种方法可以做,基本上,同样的事情呢?那岂不是成为可能(和更简单),以只有一个append/insert(x, i=len(this))地方的i将是一个可选的参数,当不存在,就意味着添加到列表的末尾?

python insert append

6
推荐指数
1
解决办法
583
查看次数

为什么可以使用“image/jpeg”数据 URL 显示 base64 编码的 PNG?

下面是一个 base64 编码的 PNG 数据 URL 的示例(当然使用“image/png”数据类型):

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTczbp9jAAAA1UlEQVQ4T62SsQ0CMQxFUzAEA1BQMgIlI1zJCIxAT0HJCBSUlFdQMAQlJWOE78hnObYDIuJLTzr/+/5FkpRz/guh2UM9pLQBWzDXvgVacG4lngncAH08QFgGLcEL0LAX34ROHCBcGaRLiEH+meAMXDhESBlkS3bVrh6KEZetQbOk7FmjmL5M40rKTmQSEJVdeXlCDtcSmgRkz4Ro32Zo+pK7+g7LqqEYjduBjsrzT6Mavl3xhzIJcXDkEBHfTl3WfNln8ARhyQR0sDkX6iU0ewjN38npDdYczGIKuRnZAAAAAElFTkSuQmCC
Run Code Online (Sandbox Code Playgroud)

我注意到(在 Firefox 和 Chrome 中)即使数据类型设置为“image/jpeg”(并保持所有其余部分不变),事情仍然有效,如下所示:

data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTczbp9jAAAA1UlEQVQ4T62SsQ0CMQxFUzAEA1BQMgIlI1zJCIxAT0HJCBSUlFdQMAQlJWOE78hnObYDIuJLTzr/+/5FkpRz/guh2UM9pLQBWzDXvgVacG4lngncAH08QFgGLcEL0LAX34ROHCBcGaRLiEH+meAMXDhESBlkS3bVrh6KEZetQbOk7FmjmL5M40rKTmQSEJVdeXlCDtcSmgRkz4Ro32Zo+pK7+g7LqqEYjduBjsrzT6Mavl3xhzIJcXDkEBHfTl3WfNln8ARhyQR0sDkX6iU0ewjN38npDdYczGIKuRnZAAAAAElFTkSuQmCC
Run Code Online (Sandbox Code Playgroud)

但为什么?

browser base64 image data-uri

6
推荐指数
1
解决办法
1482
查看次数

仅使用列表推导重新排列(列表列表)矩阵

考虑以下 3 x 4 矩阵在 Python 中实现为 3 个长度为 4 的列表:

>>> matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]
Run Code Online (Sandbox Code Playgroud)

以下列表推导式将重新排列矩阵转置行和列:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Run Code Online (Sandbox Code Playgroud)

但假设我需要这个结果:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
Run Code Online (Sandbox Code Playgroud)

这是一个重新排列的 4 x 3 矩阵,以获得原始矩阵的顺序“滚动”,每 3 个元素“中断”到一个新行。

我知道有可能制定出一种算法来完成任务,但是否可以仅使用列表推导来获得该算法(而且,如果是,如何?)


编辑:

接受的答案应满足以下要求:

  • 必须在基本/干净的 Python 安装上工作(没有额外的库);
  • 必须(类似于矩阵转置)是“单线”。

第二次编辑 + …

python list-comprehension list matrix

5
推荐指数
1
解决办法
2181
查看次数

tk 样式自定义保存/存储在哪里?

采取这个非常简单的代码示例:

import tkinter as tk
from tkinter import ttk
    
root = tk.Tk()
    
s = ttk.Style()
s.theme_use('vista')
s.map("Mod.TCombobox",fieldbackground=[('readonly', 'red')])
Run Code Online (Sandbox Code Playgroud)

你能告诉我Mod.TCombobox自定义样式保存或存储在哪里吗?我的意思是,有没有办法检索所有可用的已定义样式选项的列表?(“标准”和“定制”都可能)。

我尝试查看官方 Python 文档,但似乎找不到答案。

(PS我尝试看一下s.element_names(),但毫不奇怪,它不在那里......)

编辑:

为了澄清一点,首先,我并不是要求提供可用主题列表(我知道可以使用命令获取s.theme_names())。

也就是说,假设我现在定义一个新规则,例如:

s.map("Mod.TEntry",fieldbackground=[('readonly', 'red')])
Run Code Online (Sandbox Code Playgroud)

我要问的是:是否有命令或任何方式可以检索自定义的 tk 样式规则列表,例如本例中的 ['Mod.TCombobox', 'Mod.TEntry'] ?(只要有可能,我什至会满足于同时包含自定义和非自定义样式规则定义的列表,将我的自定义定义样式与“标准”样式混合/在一起,例如“TCombobox”、“TEntry”等。 ..)。

同样,当使用样式布局命令时,例如:

s.layout('MyCustomTCB', s.layout('TCombobox'))
Run Code Online (Sandbox Code Playgroud)

作为问题的第二部分:在哪里或如何检索包含我创建的所有自定义样式布局的列表?

(PS 即使我不是在这里问这个,我还是要感谢 Bryan Oakley,他为我提供了ttk 库源代码的链接,这对于了解标准内置 tk 主题样式的问题非常有用规则和布局。)

使用Python 3

python tk-toolkit tkinter ttk python-3.x

5
推荐指数
1
解决办法
178
查看次数

如何在Yii2验证规则消息中添加换行符

我需要打破Yii2验证规则中使用的长消息.

我试过这样的:

public function rules()
{
    return [
        ['username', 'required', 'message' => 'long message first line here'."<br>".PHP_EOL.'long message last line here'],
    ];
}
Run Code Online (Sandbox Code Playgroud)

但是<br>出现在消息中并且该行不会破坏我需要的地方.

为了清楚起见,我得到的是:

 long message first line here<br>long message last line here
Run Code Online (Sandbox Code Playgroud)

并不是:

 long message first line here
 long message last line here
Run Code Online (Sandbox Code Playgroud)

有谁可以帮忙吗?我真的很感激!先感谢您.

php message line-breaks yii2 yii2-validation

4
推荐指数
1
解决办法
903
查看次数

Javascript:在提交之前快速检查表单内容是否已更改

简单的问题(我猜)...我是一个"编辑元素"的html表单.作为页面加载,表单填充了当前元素属性(例如,名称等)我可以修改一些输入字段甚至决定不这样做但我在提交按钮上单击相同,因为它是唯一可用的.

我的问题:输入元素的属性/属性是否包含我可以访问的初始输入值,以便在单击提交按钮时将它们与当前输入值进行比较?换句话说:在提交表单之前,是否有一种快速方法可以检查是否至少有一个输入字段已被更改?(所以如果不是真的需要更新就停止事件)(我的意思是"真的改变了",当我修改某些内容时不考虑改变,而是像之前那样重写它)

我想要一个最小的例子:如何检查一个简单的输入文本"名称"是否已被更改

PS当然,要触发"check-if-something-changed"功能,如果我决定使用纯javascript,我会在使用jQuery时使用onSubmit事件,我会使用类似的东西:

$('#formMod').submit(function(){ ...
Run Code Online (Sandbox Code Playgroud)

谢谢.

javascript forms form-submit

2
推荐指数
1
解决办法
4247
查看次数

替换&#xD; 在使用SimpleXML打印XML内容之前使用<br>

我知道这可能是一个非常简单的问题,但我仍然找不到解决方案......好吧,我会简短一点:假设有一个如此结构化的XML文件:

<root><item><text>blah blah blah&#xD;blah blah blah&#xD;blah blah blah&#xD;...</text></item></root>
Run Code Online (Sandbox Code Playgroud)

我的XML显然更复杂,但这并不重要,因为我的问题是:如何&#xD;用例如html <br>标签替换那些?

我正在使用SimpleXML从XML读取数据并尝试使用:

echo str_replace("&#xD;", "<br>", $message->text);
Run Code Online (Sandbox Code Playgroud)

甚至:

echo str_replace("\n", "<br>", $message->text);
Run Code Online (Sandbox Code Playgroud)

但没什么......

我需要使用SimpleXML.

php xml replace newline simplexml

1
推荐指数
1
解决办法
2万
查看次数

从字典中获取单个密钥的最佳方法是什么?

拥有一个python字典并且知道它只由一个键/值对组成,检索该单个/唯一项的最佳方法是什么?

到目前为止,我知道我可以使用以下两种方法之一:

  1. list(mydict.keys())[0]

  2. next(iter(mydict))

据我所知,list表现比iter一些人差,所以后一种方法应该更好,对吧?哪种方式最好?有什么比我指出的两种方式更好的东西?请告诉我.

python dictionary

1
推荐指数
2
解决办法
2406
查看次数