我是ruby的新手并且正在完成一个教程,但我不确定这行代码意味着什么:
[movie, version_number].any?(&:nil?)
Run Code Online (Sandbox Code Playgroud)
根据我的研究,Array.any?如果数组的任何元素不是false或者,则返回true nil.并且&:nil?意味着调用to_proc()符号,:nil?即:nil?.to_proc声明等同于
[movie, version_number].any?(:nil?.to_proc)
Run Code Online (Sandbox Code Playgroud)
这相当于
[movie, version_number].any?{|item| item.nil?}
Run Code Online (Sandbox Code Playgroud)
此外,any?将集合的每个元素(在本例中为Array)传递给{|item| item.nil?}块.
当你把它们放在一起时,代码行是否意味着,nil?在调用数组之前调用Array中的每个元素.any?,即它是否相当于:
[movie.nil?, version_number.nil?].any?
Run Code Online (Sandbox Code Playgroud)
或者,用简单的英语,是否相当于nil的movie或version_number中的任何一个?
我试图理解Python中的“可调用对象”是什么,以及类可调用的含义。我在玩以下代码:
class A(object):
def __init__(self):
pass
print("Is A callable? " + str(callable(A)))
a=A()
print("created a")
a()
Run Code Online (Sandbox Code Playgroud)
得到以下结果:
Is A callable? True
created a
Traceback (most recent call last):
File "test2.py", line 11, in <module>
a()
TypeError: 'A' object is not callable
Run Code Online (Sandbox Code Playgroud)
此外,
print(type(A.__call__()))
Run Code Online (Sandbox Code Playgroud)
给出:
<class '__main__.A'>
Run Code Online (Sandbox Code Playgroud)
这是否意味着A类具有__call__方法?为什么是class类?
A.__call__()每次使用A()实例化时都会被调用吗?
我不是如何实现Python列表的专家,但据我所知,它们是作为动态数组而不是链接列表实现的.因此,我的问题是,如果将python列表实现为数组,为什么它们被称为"列表"而不是"数组".
这只是一个语义问题,还是有一些更深层次的技术原因.Python中的动态数组实现是否接近列表实现?或者是因为动态数组实现使其行为更接近列表的行为而不是数组?或者其他一些我不明白的原因?
为了清楚起见,我并没有具体询问如何或为什么将Python列表实现为动态数组,尽管这可能与答案相关.
我正在关注Twisted教程(请参阅此处的底部)
我正在尝试连接到聊天服务器,但我不断收到以下错误
File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/tcp.py", line 1073, in doRead
protocol.makeConnection(transport)
File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/internet/protocol.py", line 510, in makeConnection
self.connectionMade()
File "twisted_chat.py", line 12, in connectionMade
self.sendLine("What's your name?") <------------- This line
File "/Users/kevin/anaconda3/lib/python3.6/site-packages/twisted/protocols/basic.py", line 635, in sendLine
return self.transport.write(line + self.delimiter)
builtins.TypeError: must be str, not bytes
Run Code Online (Sandbox Code Playgroud)
似乎触发此错误的代码是
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
class Chat(LineReceiver):
def __init__(self, users):
self.users = users
self.name = None
self.state = "GETNAME"
def connectionMade(self):
self.sendLine("What's your name?") <------- This …Run Code Online (Sandbox Code Playgroud)