我发现这个是因为我遇到的一些作业问题是通过文档字符串测试的,它让我失败了。
例如:
def foo(x):
"""
>>> foo(5)
25
>>> foo(6)
36 # Are you sure?
"""
return x**2
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Run Code Online (Sandbox Code Playgroud)
上面的示例失败并显示:
Expected:
36 # are you sure?
Got:
36
Run Code Online (Sandbox Code Playgroud)
我想知道我们是否不应该在文档字符串中添加注释?或者有没有办法让 python 忽略文档字符串中的注释?
为什么valueOf有两个参数?
public static <T extends Enum<T>> T valueOf?(Class<T> enumType, String name)参数:
enumType - 要从中返回常量的枚举类型的 Class 对象
name - 要返回的常量的名称
但我在网上读到的大多数例子都说:
enum WorkDays {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}
Run Code Online (Sandbox Code Playgroud)
测试:
WorkDays day1 = WorkDays.valueOf("MONDAY");
System.out.println(day1); // >>> MONDAY
Run Code Online (Sandbox Code Playgroud)
该方法似乎只使用了一个参数?
正如一些好人向我展示的那样,callable()可以用来解决这个问题,我仍然发现这是一个不同的问题,因为任何想到这个问题的人都不会找到答案,因为他不会将其直接连接到callable(). 另外,我找到了一种不使用的可能方法,即按照我自己的一个答案中所示的方式callable()使用。type()
假设我创建一个简单的类Cls
class Cls():
attr1 = 'attr1'
def __init__(self, attr2):
self.attr2 = attr2
def meth1(self, num):
return num**2
obj = Cls('attribute2')
print(hasattr(obj, 'attr1')) # >>> True
print(hasattr(obj, 'attr2')) # >>> True
print(hasattr(obj, 'meth1')) # >>> True
Run Code Online (Sandbox Code Playgroud)
据我所知,属性是类内的变量,方法是类内的函数。他们不一样。
显然,Python 无法hasmethod()调用。看来这真的为我的测试提供hasattr()了一切,,。它与属性或方法没有区别。True'attr1''attr2''meth1'
如果我使用dir(),属性和方法将全部显示在输出中,并且您也无法真正分辨出哪一个是什么类型。
有人可以解释一下为什么吗?
假设我要修改脚本中的所有模式,以一行为例:
line = "assert Solution().oddEvenList(genNode([2,1,3,5,6,4,7])) == genNode([2,3,6,7,1,5,4]), 'Example 2'"
Run Code Online (Sandbox Code Playgroud)
请注意,函数genNode将List[int]作为参数。我想要的是删除列表,并保留列表中的所有整数,以便该函数实际上将其作为*nums参数。
期待:
line = "assert Solution().oddEvenList(genNode(2,1,3,5,6,4,7)) == genNode(2,3,6,7,1,5,4), 'Example 2'"
Run Code Online (Sandbox Code Playgroud)
我想出了一个re模式
r"([g][e][n][N][o][d][e][(])([[][0-9\,\s]*[]])([)])"
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用它......我无法开始re.sub工作,因为它要求我用固定字符串替换。
我怎样才能达到我想要的结果?
最近我学习了列表和for循环,以及.pop()指示和删除列表中最后一项的命令.
所以我试着编写一个代码来逐个删除列表中的最后一项,直到它只剩下一个项目.
代码是:
list_A = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
for i in list_A:
print(list_A.pop())
if 'c' not in list_A:
break
print("job done.")
Run Code Online (Sandbox Code Playgroud)
python 3.6的输出给了我:
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
j
i
h
g
f
job done.
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它确实有效,但只有一半呢?
我在期待:
j
i
h
g
f
e
d
c
job done
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果它返回一些错误,我会更舒服,这意味着代码不正确.但为什么它有效,但不是完整的方式?
在这里随机学习模块,一开始就有簿记功能,据我所知,设置一个特定的种子是为了确保获得相同的随机数.
但是,getstate()和setsate()?link
在文档中,它没有介绍这个状态的含义,如果我不知道它意味着什么,我怎么能正确设置它?
random.getstate()
返回捕获生成器当前内部状态的对象.可以将此对象传递给setstate()以恢复状态.
random.setstate(状态)
state应该是从之前调用getstate()获得的,而setstate()将生成器的内部状态恢复到调用getstate()时的状态.
谢谢,
这涉及到我在尝试解决链表反向问题时遇到的一个问题。
首先放一些链表定义和生成链表的快速方法的初步代码:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self.next:
return "{}->{}".format(self.val, repr(self.next))
else:
return "{}".format(self.val)
def genNode(*nodes, end=None):
if len(nodes) == 1 and type(nodes[0]) == list:
nodes = nodes[0]
for i in nodes[::-1]:
n = ListNode(i)
n.next, end = end, n
return n if nodes else None
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我发现交换机制仍然取决于我编写的变量的顺序。
最初,当我们谈论 python 中的交换值时,我们可以这样做:
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
如果我有的话,它应该以同样的方式工作
b, a = a, b
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写的这个反向链表方法有3个变量交换,想法很简单,创建一个虚拟头,并在dummy和dummy.next之间不断添加节点,这样就可以反转。
def rev(head):
dummy = ListNode('X')
while head:
dummy.next, head.next, …Run Code Online (Sandbox Code Playgroud) 首先,我完全理解global陈述的含义和使用方法.
现在,让我们来看看:
x = 100
def f():
global x
global xxx
x = 99
return x
print(f())
# >>> 99
print(x)
# >>> 99
Run Code Online (Sandbox Code Playgroud)
您可以看到,通过使用global x,我成功地在全局环境中更改了x的值.
但是xxx根本不存在,为什么我被允许全局化它甚至不会带来任何错误,即使该函数被执行?
它非常重载,所有元素的数量从1到10 ...
它说:
返回包含五个元素的不可修改列表。
有关详细信息,请参见不可修改的列表。
类型参数:E-列表的元素类型参数:e1-第一个元素e2-第二个元素e3-第三个元素e4-第四个元素e5-第五个元素
我只是一点都不了解,可以找到一种使用它的方法吗?
我不得不说这是一个错误发现的,因为我试图将 a 转换String为 an Integer,但我没有意识到它是一种Character类型而不是Integer。
但不知何故,尽管JDK 文档中没有提到,但Integer.valueOf仍然可以使用参数运行?Character
System.out.println(Integer.valueOf("2")); // >>> 2
System.out.println(Integer.valueOf('2')); // >>> 50
Run Code Online (Sandbox Code Playgroud)
虽然它对于String的参数工作得很好"2",但它没有为Character的参数提供预期的结果'2'。为什么会出现这种情况?
我想了解我是否错过了什么?为什么它返回 50 而不是 2?
谢谢
好的,我检查了 ASCII 表,它返回 50,因为 的索引Character '2'是 50。