我正想通过后交有关如何观察者模式可以在Python中实现.在同一篇文章中有这些评论.
1)在python中你也可以只使用普通函数,"观察者"类并不是真正需要的.
2)这是Java程序员在切换到Python后尝试做的很好的例子 - 他们觉得Python缺少所有垃圾并尝试"移植"它.
这些注释暗示观察者模式在python中并不真正有用,并且存在其他方法来实现相同的效果.这是真的,如果能做到这一点?
这是观察者模式的代码:
class Observable(object):
def __init__(self):
self.observers = []
def register(self, observer):
if not observer in self.observers:
self.observers.append(observer)
def unregister(self, observer):
if observer in self.observers:
self.observers.remove(observer)
def unregister_all(self):
if self.observers:
del self.observers[:]
def update_observers(self, *args, **kwargs):
for observer in self.observers:
observer.update(*args, **kwargs)
from abc import ABCMeta, abstractmethod
class Observer(object):
__metaclass__ = ABCMeta
@abstractmethod
def update(self, *args, **kwargs):
pass
class AmericanStockMarket(Observer):
def update(self, *args, **kwargs):
print("American stock market received: {0}\n{1}".format(args, kwargs))
class EuropeanStockMarket(Observer):
def …Run Code Online (Sandbox Code Playgroud) 这不编译的事实是否意味着他们不是一流的类型?
fun foo(s: String): Int = s.length
// This won't compile.
val bar = foo
Run Code Online (Sandbox Code Playgroud)
有没有办法在不诉诸OO的情况下做到这一点?
我试图在JavaScript中执行以下操作:
var gete = document.getElementById;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误(来自FireBug的控制台):
uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost:8080/im_ass1/ :: anonymous :: line 15" data: no]
现在显然我可以将函数包装如下:
var gete = function (id) {
return document.getElementById(id);
};
Run Code Online (Sandbox Code Playgroud)
但是,在将函数分配给另一个名称时,我得到上述异常的原因是什么?
我有一个案例类,它包含一系列函数:
case class A(q:Double, r:Double, s:Double, l:List[(Double)=>Double])
Run Code Online (Sandbox Code Playgroud)
我定义了20多个函数.其中的一些功能都有自己的参数,其中一些还可以使用q,r和s值从案例类.两个例子是:
def f1(w:Double) = (d:Double) => math.sin(d) * w
def f2(w:Double, q:Double) = (d:Double) => d * q * w
Run Code Online (Sandbox Code Playgroud)
问题是,然后我需要引用q,r和s实例的情况下上课的时候两次:
A(0.5, 1.0, 2.0, List(f1(3.0), f2(4.0, 0.5))) //0.5 is referenced twice
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样实例化这个类:
A(0.5, 1.0, 2.0, List(f1(3.0), f2(4.0))) //f2 already knows about q!
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳技术是什么?我可以在案例类扩展的特征中定义我的函数吗?
编辑:真实世界的应用程序有7个成员,而不是3.只有少数功能需要访问成员.大多数功能都不关心它们.
我有一个传递给的函数Select.但是当我在所述函数中放置断点时,程序不会中断.
例:
public static int PlusTwo(int x)
{
return x + 2;
}
public static void Main(string[] args)
{
var foo = new[] { 2, 3, 5, 7 };
var bar = foo.Select(PlusTwo);
}
Run Code Online (Sandbox Code Playgroud) 给出以下Scala代码:
val buffer = new scala.collection.mutable.ArrayBuffer[Function0[Boolean]]
def foo(): Boolean = { println("foo"); false }
def bar(): Boolean = { println("bar"); true }
buffer += foo
buffer += bar
Run Code Online (Sandbox Code Playgroud)
我已经为缓冲区添加了两个函数.现在,我该如何删除一个?
buffer -= foo 不起作用,因为foo在任何比较之前被计算为布尔值.
例如,当人们说Python具有第一类函数时,它就像Python一样具有二级函数.但是,我从来没有(明知)在Python中遇到过第二个类函数.当我们这样说时,它真的意味着"所有Python函数都是一流的吗?" 或者是否有Python中的第二类函数的示例?
Julia文档声明函数是第一类对象.我理解这意味着我应该能够像使用旧数据类型一样使用和定义它们.
因此,我很惊讶
function a(b::Int64)
if b > 0
c = 1
else
c = -1
end
end
a(2)
Run Code Online (Sandbox Code Playgroud)
同时工作得很漂亮
function d(e::Int64)
if e > 0
println("Positive argument")
function f()
println("Return positive")
return e
end
else
println("Negative argument")
function f()
println("Return negative")
return e
end
end
return f
end
Run Code Online (Sandbox Code Playgroud)
在使用时有效,但做了非常直观的事情:
>>> g = d(2)
Positive argument
(::f) (generic function with 1 method)
>>> g()
Return negative
2
Run Code Online (Sandbox Code Playgroud)
或者:
>>> g = d(-2)
Negative argument
ERROR: UnderVarError: f not defined
Run Code Online (Sandbox Code Playgroud)
这可能比返回意想不到的东西更有用,但更令人困惑的是.
我希望 …
Python 变量是鸭子类型的,可变的,它的函数可以编写为具有副作用。(换句话说,它有很多非函数式编程特性。)
但是,它也具有一流的功能,但它不是函数式编程语言。所以我想,即使它不属于该范式,编程语言也可以具有功能方面(或另一种语言范式的方面),这一定是真的。究竟是什么让 Python不是函数式编程语言?是测试它是否具有单一特征或多个事物的测试?(如果是前者,使 Python 无法运行的单个方面或使 Haskell 具有功能的单个方面是什么?)
python programming-languages functional-programming first-class-functions
这句话是什么意思php,
PHP 支持一流的函数
谁能简单解释一下,我在阅读文档时似乎不明白。
我希望有一个例子。