作为一个普遍感兴趣的问题,我想知道是否有更优雅/有效的方法来做到这一点.我有一个函数比较两个日期的开始/结束元组,如果它们相交,则返回true.
from datetime import date
def date_intersection(t1, t2):
t1start, t1end = t1[0], t1[1]
t2start, t2end = t2[0], t2[1]
if t1end < t2start: return False
if t1end == t2start: return True
if t1start == t2start: return True
if t1start < t2start and t2start < t1end: return True
if t1start > t2start and t1end < t2end: return True
if t1start < t2start and t1end > t2end: return True
if t1start < t2end and t1end > t2end: return True
if t1start > t2start …Run Code Online (Sandbox Code Playgroud) 我正在阅读Python的隐藏功能,我遇到了这个答案.
从帖子开始:
使用交互式shell时,"_"包含最后打印项的值:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> _
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
Run Code Online (Sandbox Code Playgroud)
这个运营商的名字是什么?我在文档上找不到它,我从未听说过它(以及其他语言).是否值得使用它?
PS.我想知道它的名字,因为我想看看该函数是如何实现的,并搜索其他语言是否具有这个非常棒的功能.
Python循环语句可能有一个else子句,当且仅当循环未被a终止时才执行该子句break.换句话说,当条件变为False(有while)或迭代器耗尽时(带for).
这个循环 - 其他构造是否源自另一种语言(理论上的或实际的)?它是否被任何较新的语言所采用?
也许我应该问问Guido的前任,但他肯定太忙了,无法进行如此徒劳的调查.;-)
相关讨论和示例: 在for循环中使用'else'的Pythonic方法
所以我在网上看了一些代码,我遇到了一条线(在第286行):
if depth > 0 and best <= -MATE_VALUE is None and nullscore > -MATE_VALUE:
我理解困难的部分是best <= -MATE_VALUE is None.
所以我解雇了翻译,看看如何value1 > value2 is value3工作等陈述.
所以我试过了
>>> 5 > 2 is True
False
>>> (5 > 2) is True
True
>>> 5 > (2 is True)
True
Run Code Online (Sandbox Code Playgroud)
我的问题
为什么5 > 2 is True不True呢?这些东西通常如何运作?
谢谢.
在C/C++中,我经常发现它在调试时有用,比如定义一个宏,ECHO(x)打印出变量名及其值(即ECHO(variable)可能打印variable 7).您可以使用"字符串化操作符的宏来得到变量名#描述这里.有没有办法在Python中这样做?
换句话说,我想要一个功能
def echo(x):
#magic goes here
Run Code Online (Sandbox Code Playgroud)
如果被称为foo=7; echo(foo)(或foo=7; echo('foo')可能),将打印出来foo 7.我意识到如果我将变量及其名称都传递给函数,这样做是微不足道的,但是在调试时我会使用这样的函数,重复总是会让我感到恼火.
所以,我一直在阅读这篇文章,并了解了如何向生成器发送值.
而现在我有点困惑.产量是陈述还是表达?它不像函数一样使用括号语法,所以它看起来像语句.但它返回值,所以它就像表达式.
就在不久前,我已经开始讨论"为什么python没有'如果x = foo():( ...)'?" (为什么我们不能在if语句条件中分配).我说,语句是原子的,所以赋值语句和if语句应该分开.现在,我不知道该怎么想.
==编辑==
我做了我公平的阅读.
http://docs.python.org/2/reference/expressions.html#generator.send - "value参数成为当前yield表达式的结果."
因此,产生HAS值.我明白了,所有的文档都说这是一个陈述,但如果陈述可能有价值,那么表达和陈述之间的差异到底是什么?
另外,我知道什么是生成器,协同程序等等.我需要元语义或文档的语义:D
==最终答案==
要按行迭代文件,可以做 -
for line in f:
Run Code Online (Sandbox Code Playgroud)
(其中f是文件迭代器).
我想用逗号分隔的块来迭代文件,而不是用换行符分隔的块.我可以读取所有行,然后用逗号分割字符串,但是pythonic的方法是什么呢?
有人发布了这个有趣的公式,我在Python 3控制台中试了一下:
>>> (a, b) = a[b] = {}, 5
>>> a
{5: ({...}, 5)}
Run Code Online (Sandbox Code Playgroud)
虽然这里有很多需要解压缩的东西,但是我不理解的东西(以及有趣的角色配方的语义似乎特别难以搜索){...}在这种背景下的意义是什么?改变上面的一点:
>>> (a, b) = a[b] = {'x':1}, 5
>>> a
{5: ({...}, 5), 'x': 1}
Run Code Online (Sandbox Code Playgroud)
这是第二个输出让我感到困惑:我本来期望它{...}会被改变,但我最接近的猜测是, 5暗示一个元组,其中第一个元素以某种方式未定义?那是什么{...}意思?如果是这样,这是我在Python中的一个新类型,我希望有一个名称,以便我可以了解更多.
Python函数对象有一个属性字典func_dict,在函数外部可见并且是可变的,但在调用函数时不会被修改.(我从昨天问过的问题的答案(#1753232)中学到了这一点:谢谢!)我正在阅读代码(http://pythonprogramming.jottit.com/functional_programming),它记住了Fibonacci数字的计算并思考,"为什么不使用该func_dict属性进行记忆?" 它起作用了(见下文;代码末尾的输出).这有点像有一个类属性,但在对象外面有初始化代码(在这种情况下,不是类而是函数).
我想知道使用这个属性可以做什么相似(或不同)的技巧?
def fib(n):
if n in fib.cache:
print "found fib.cache[%d] = %d: " %(n, fib.cache[n])
return fib.cache[n]
else:
print "fib.cache[%d] = fib(%d) + fib(%d)" % (n, n-1, n-2)
fib.cache[n] = fib(n-1) + fib(n-2)
print "modified fib.cache: ", fib.cache
return fib.cache[n]
fib.cache = {0:0, 1:1}
for x in range(7):
print "==================>", x
print fib( x)
"""
==================> 0
found fib.cache[0] = 0:
0
==================> 1
found fib.cache[1] = 1:
1
==================> …Run Code Online (Sandbox Code Playgroud) 我的课程有很多属性,都需要使用相同类型的setter:
@property
def prop(self):
return self._prop
@prop.setter
def prop(self, value):
self.other_dict['prop'] = value
self._prop = value
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以将此setter结构应用于多个属性,而无需为每个属性编写这两种方法?
python ×10
datetime ×1
dictionary ×1
ellipsis ×1
expression ×1
fibonacci ×1
function ×1
history ×1
if-statement ×1
intersection ×1
loops ×1
memoization ×1
python-3.x ×1
reflection ×1
variables ×1
yield ×1