例如,如果你有n个相同长度的bool列表,那么elementwise boolean AND应该返回另一个列表,该列表的长度在所有输入列表都为True的位置为True,其他地方为False.
它很容易编写,我只是希望使用内置(如果存在)(为了标准化/可读性).
这是元素AND的实现:
def eAnd(*args):
return [all(tuple) for tuple in zip(*args)]
Run Code Online (Sandbox Code Playgroud)
示例用法:
>>> eAnd([True, False, True, False, True], [True, True, False, False, True], [True, True, False, False, True])
[True, False, False, False, True]
Run Code Online (Sandbox Code Playgroud) python list built-in boolean-operations elementwise-operations
我set在交互式python会话中使用它作为变量名称而意外地覆盖了 - 有没有什么办法可以在set不重新启动会话的情况下访问原始函数?
(我在那个会话中有很多东西,我宁愿不必这样做,虽然我当然可以在必要的时候.)
我试图更熟悉itertools模块,并找到了一个名为的函数ifilter.
根据我的理解,它基于给定的函数进行过滤和迭代,并在包含函数计算结果的iterable元素的列表上返回一个迭代器True.
问题1:到目前为止我的理解是否正确?
问题2:除了返回和迭代器之外,它与内置filter函数有什么不同?
问题3哪个更快?
据我所知,事实并非如此.我错过了什么吗?(我跑了下面的测试)
>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
...
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
Run Code Online (Sandbox Code Playgroud) Python 2.6引入了一个next函数.
为什么这有必要?人们总是可以打字obj.next()而不是next(obj).
后者更多pythonic吗?
我正在寻找一个像这样的数组函数:
$myArray = array(
'apple'=>'red',
'banana'=>'yellow',
'lettuce'=>'green',
'strawberry'=>'red',
'tomato'=>'red'
);
$keys = array(
'lettuce',
'tomato'
);
$ret = sub_array($myArray, $keys);
Run Code Online (Sandbox Code Playgroud)
$ ret是:
array(
'lettuce'=>'green',
'tomato'=>'red'
);
Run Code Online (Sandbox Code Playgroud)
一个没有问题,我自己写下来,我想避免foreach循环并采用内置函数或内置函数的组合.在我看来,这是一个通用的和常见的数组操作 - 如果循环是唯一的选择,我会感到惊讶.
如果我错了,请纠正我,但要做类似的事情
var typeOfName = typeof(Foo).Name;
Run Code Online (Sandbox Code Playgroud)
和
var nameOfName = nameof(Foo);
Run Code Online (Sandbox Code Playgroud)
应该给你完全相同的输出.根据这个来源的一个可以理解的原因:https://msdn.microsoft.com/en-us/library/dn986596.aspx是那个
"使用nameof有助于在重命名定义时保持代码有效"
如果你想要得到的类实例的字符串是不是可以做这样的事情:
var fooInstance = new Foo();
var nameOfName = nameof(fooInstance);
Run Code Online (Sandbox Code Playgroud)
但是,你可以这样做:
static string GetName<T>(T item) where T : class
{
return typeof(T).GetProperties()[0].Name;
}
var typeOfName2 = GetName(new { fooInstance });
Run Code Online (Sandbox Code Playgroud)
在这两种情况下(typeof和nameof)都可以进行重构,所以我没有看到重新发明另一个更高级别关键字的任何其他原因,例如nameof,执行已经存在的事情.它们之间是否有任何差异,我没有清楚地看到?
最后,如果有人能指出我参考资料来了解其执行情况,我将不胜感激nameof.它使用反射吗?
更新1: 从这里采取
nameof显然与声明字符串变量一样有效.没有任何反思或任何反对!
var firstname = "Gigi";
var varname = nameof(firstname);
Console.WriteLine(varname); // Prints "firstname" to the console
Run Code Online (Sandbox Code Playgroud)
当您查看生成的MSIL时,您将看到它等同于字符串声明,因为使用ldstr运算符将对字符串的对象引用推送到堆栈: …
我使用以下语句来获取当前时间.
print "$query executed successfully at ",localtime;
print "$query executed successfully at ",(localtime);
print "$query executed successfully at ".(localtime);
Run Code Online (Sandbox Code Playgroud)
产量
executed successfully at 355516731103960
executed successfully at 355516731103960
executed successfully at Wed Apr 7 16:55:35 2010
Run Code Online (Sandbox Code Playgroud)
前两个语句不以日期格式打印当前时间.第三个语句仅以日期格式提供正确的输出.
我的理解是第一个在标量上下文中返回一个值,所以它返回数字.
然后在第二个打印中我只在列表上下文中使用了localtime,为什么它也给出了数字输出.
我编写了一个用Python表示向量的类(作为练习),我在扩展内置运算符方面遇到了问题.
我__mul__为vector类定义了一个方法.问题是在表达式中x * y,解释器调用__mul__x 的方法,而不是y.
所以vector(1, 2, 3) * 2返回一个矢量<2,4,6>就像它应该的那样; 但是2 * vector(1, 2, 3)会创建一个TypeError,因为内置的int类不支持我的用户定义向量的乘法.
我可以通过简单地编写一个新的乘法函数来解决这个问题
def multiply(a, b):
try:
return a * b
except TypeError:
return b * a
Run Code Online (Sandbox Code Playgroud)
但这需要重新定义我想用于用户定义的类的每个函数.
有没有办法让内置函数正确处理?
Python中的方法在什么时候获取get属性? - 一旦他们在课堂上定义了?为什么Python让我定义一个没有任何参数的方法(甚至不是第一个self参数)?
我知道如何使用classmethod和staticmethod,并且我知道它们是内置函数,但是如此装饰的函数会发生什么?
基本上,我想知道类定义和类构造之间发生的"魔力".