这是我的代码:
import datetime
today = datetime.date.today()
print today
Run Code Online (Sandbox Code Playgroud)
这打印:2008-11-22这正是我想要的但是......我有一个列表我正在追加这个然后突然一切都变得"不稳定".这是代码:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist
Run Code Online (Sandbox Code Playgroud)
这打印出以下内容:
[datetime.date(2008, 11, 22)]
Run Code Online (Sandbox Code Playgroud)
我怎么能得到像"2008-11-22"这样的简单日期呢?
我正在寻找一个清晰,简洁和准确的答案.
理想情况下,作为实际答案,虽然欢迎链接到良好的解释.
Ruby可以向Number类和其他核心类型添加方法以获得如下效果:
1.should_equal(1)
Run Code Online (Sandbox Code Playgroud)
但似乎Python无法做到这一点.这是真的?如果是这样,为什么?是否与类型无法修改的事实有关?
更新:我不想谈论猴子修补的不同定义,而是只关注上面的例子.我已经得出结论,由于你们中的一些人已经回答,所以无法做到.但我想更详细地解释为什么不能这样做,也许如果Python中有什么功能可以允许这样做.
回答你们中的一些人:我可能想要这样做的原因只是美学/可读性.
item.price.should_equal(19.99)
Run Code Online (Sandbox Code Playgroud)
这更像是英语,并清楚地表明哪个是测试值,哪个是预期值,如下所示:
should_equal(item.price, 19.99)
Run Code Online (Sandbox Code Playgroud)
这个概念就是Rspec和其他一些Ruby框架所基于的.
ruby python programming-languages fluent-interface monkeypatching
我理解在python中的每一件事,无论是数字,字符串,字典还是任何东西都是一个对象.变量名只是指向内存中的对象.现在根据这个问题,
>> a_dict = b_dict = c_dict = {}
这将创建一个空字典,并且所有变量都指向此dict对象.因此,改变任何一个都会反映在其他变量中.
>> a_dict["key"] = "value" #say
>> print a_dict
>> print b_dict
>> print c_dict
Run Code Online (Sandbox Code Playgroud)
会给
{'key': value}
{'key': value}
{'key': value}
Run Code Online (Sandbox Code Playgroud)
我已经理解了指向对象的变量的概念,所以这看起来很公平.
现在即使它可能很奇怪,因为它是如此基本的陈述,为什么会发生这种情况?
>> a = b = c = 1
>> a += 1
>> print a, b, c
2, 1, 1 # and not 2, 2, 2
Run Code Online (Sandbox Code Playgroud)
问题的第一部分:为什么这里应用的概念不同?
实际上,当我试图为此寻找解决方案时,出现了这种疑问:
>> a_dict = {}
>> some_var = "old_value"
>> a_dict['key'] = some_var
>> some_var = "new_value" …Run Code Online (Sandbox Code Playgroud) 我记得有一次,据说Python不像Ruby那样面向对象,因为在Ruby中,一切都是对象.Python也改变了吗?最新的Python是否比以前的版本更面向对象?
我完全理解在这个例子中传递的是什么self.我对它如何被传递到self内部非常困惑.有人可以帮我理解吗?
class Cars:
def __init__(self, model, engine, doors):
self.model = model
self.engine = engine
self.doors = doors
tesla = Cars('Model S', 'Electric', 'Four door')
ford = Cars('Mustang', 'v8', 'Two door')
Run Code Online (Sandbox Code Playgroud) hasattr文档说它需要一个对象和一个属性名称,并让你知道该对象上是否存在该属性.
我发现它似乎也适用于类名(即不是实例对象).
就像是:
class A:
def Attr1(self):
pass
> hasattr(A, 'Attr1')
True
>
Run Code Online (Sandbox Code Playgroud)
我想使用它来使一些测试代码更容易编写,但是如果这是实现的副作用而不是真正想要的话,不希望稍后被咬.
请不要要求查看测试代码,看看我是否可以做其他事情,因为这不是真正的问题.
这有什么官方的python立场吗?我假设在文档中提到的对象是在讨论实例对象.
我尝试使用谷歌搜索(并查看StackOverflow中的一些问题),但似乎没有找到任何东西.
所以我正在浏览copy库的源代码,我发现了这个:
cls = type(x)
copier = _copy_dispatch.get(cls)
if copier:
return copier(x)
try:
issc = issubclass(cls, type)
except TypeError: # cls is not a class
issc = False
Run Code Online (Sandbox Code Playgroud)
重要的是cls = type(x)和except TypeError: # cls is not a class.(如果他们帮忙,我会在中间留下一行).该except条款使我相信,有一些x针对type(x)不会再回来一类,但我想不出一个例子,这将是的情况.(我尝试print在条款中添加一个语句,看看我是否可以触发它无效).你能给我一个type()不退还课程的例子吗?
我正在寻找等价于 PHP 的 InvalidArgumentException 以在函数获取类型不正确的参数时使用。我正在使用 Python 3。(而且我对 Python 很陌生。)
ValueError文档指出“具有正确类型但值不合适的参数”,因此不适用于此处。
TypeError文档指出“在将操作或函数应用于不适当类型的对象时引发”,因此似乎也不适用。
在我的情况下使用的正确错误类型是什么?