请考虑以下有关函数组合的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)
我有两个问题:
我已经看过这里,这里和这里,我的问题是不明白是什么lambda意思或reduce做(例如,我认为我2在使用示例中将有点是funcs要编写的第一个元素).我发现更难理解的是两者如何lambda组合/嵌套并在*args, **kwargs这里作为reduce第一个参数混合的复杂性......
编辑:
首先,@ Martijn和@Borealid,感谢您的努力和答案以及您献给我的时间.(抱歉延误,我在业余时间这样做,并不总是有很多......)
好的,现在来看看事实......
关于我的问题的第1点: …
我肯定不是我想成为的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将是一个可选的参数,当不存在,就意味着添加到列表的末尾?
下面是一个 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)
但为什么?
考虑以下 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 个元素“中断”到一个新行。
我知道有可能制定出一种算法来完成任务,但是否可以仅使用列表推导来获得该算法?(而且,如果是,如何?)
编辑:
接受的答案应满足以下要求:
第二次编辑 + …
采取这个非常简单的代码示例:
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。
我需要打破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)
有谁可以帮忙吗?我真的很感激!先感谢您.
简单的问题(我猜)...我是一个"编辑元素"的html表单.作为页面加载,表单填充了当前元素属性(例如,名称等)我可以修改一些输入字段甚至决定不这样做但我在提交按钮上单击相同,因为它是唯一可用的.
我的问题:输入元素的属性/属性是否包含我可以访问的初始输入值,以便在单击提交按钮时将它们与当前输入值进行比较?换句话说:在提交表单之前,是否有一种快速方法可以检查是否至少有一个输入字段已被更改?(所以如果不是真的需要更新就停止事件)(我的意思是"真的改变了",当我修改某些内容时不考虑改变,而是像之前那样重写它)
我想要一个最小的例子:如何检查一个简单的输入文本"名称"是否已被更改
PS当然,要触发"check-if-something-changed"功能,如果我决定使用纯javascript,我会在使用jQuery时使用onSubmit事件,我会使用类似的东西:
$('#formMod').submit(function(){ ...
Run Code Online (Sandbox Code Playgroud)
谢谢.
我知道这可能是一个非常简单的问题,但我仍然找不到解决方案......好吧,我会简短一点:假设有一个如此结构化的XML文件:
<root><item><text>blah blah blah
blah blah blah
blah blah blah
...</text></item></root>
Run Code Online (Sandbox Code Playgroud)
我的XML显然更复杂,但这并不重要,因为我的问题是:如何
用例如html <br>标签替换那些?
我正在使用SimpleXML从XML读取数据并尝试使用:
echo str_replace("
", "<br>", $message->text);
Run Code Online (Sandbox Code Playgroud)
甚至:
echo str_replace("\n", "<br>", $message->text);
Run Code Online (Sandbox Code Playgroud)
但没什么......
我需要使用SimpleXML.
拥有一个python字典并且知道它只由一个键/值对组成,检索该单个/唯一项的最佳方法是什么?
到目前为止,我知道我可以使用以下两种方法之一:
list(mydict.keys())[0]
next(iter(mydict))
据我所知,list表现比iter一些人差,所以后一种方法应该更好,对吧?哪种方式最好?有什么比我指出的两种方式更好的东西?请告诉我.
python ×5
php ×2
append ×1
base64 ×1
browser ×1
composition ×1
data-uri ×1
dictionary ×1
form-submit ×1
forms ×1
function ×1
image ×1
insert ×1
javascript ×1
line-breaks ×1
list ×1
matrix ×1
message ×1
newline ×1
python-3.x ×1
replace ×1
simplexml ×1
tk-toolkit ×1
tkinter ×1
ttk ×1
xml ×1
yii2 ×1