部分应用很酷.什么功能functools.partial提供你无法通过lambdas?
>>> sum = lambda x, y : x + y
>>> sum(1, 2)
3
>>> incr = lambda y : sum(1, y)
>>> incr(2)
3
>>> def sum2(x, y):
return x + y
>>> incr2 = functools.partial(sum2, 1)
>>> incr2(4)
5
Run Code Online (Sandbox Code Playgroud)
在functools某种程度上更有效,或可读?
简单的例子.两种方法,一种叫另一种方法:
def method_a(arg):
some_data = method_b(arg)
def method_b(arg):
return some_data
Run Code Online (Sandbox Code Playgroud)
在Python中,我们可以def在另一个内部声明def.因此,如果method_b需要并且仅从中调用method_a,我应该method_b在内部声明method_a吗?像这样 :
def method_a(arg):
def method_b(arg):
return some_data
some_data = method_b
Run Code Online (Sandbox Code Playgroud)
或者我应该避免这样做?
Python文档包含创建HTTP服务器的示例:
def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
RequestHandler提供了一个类Server,然后负责自动实例化处理程序.
假设我想在创建请求处理程序时将自定义参数传递给它.我该怎么做?
更具体地说,我想从命令行传入参数,并且必须访问sys.argv请求处理程序类内部似乎不必要地笨拙.
看起来这应该是可以通过覆盖Server类的部分,但我觉得我忽略了一个更简单和更好的解决方案.
我有一个装饰器,记录装饰功能的名称(以及其他内容).
访问__name__装饰函数的属性是否安全?或者是否有一些可调用的类型没有我尚未遇到的名称?
我三者之间很困惑.我知道闭包是由另一个函数返回的函数,并且可以从封闭范围访问局部变量
例:
def add_nums(one):
def adder(two):
return one+two
return adder
a_10 = add_nums(10)
print a_10(5)
15
Run Code Online (Sandbox Code Playgroud)
在这里,adder是一个封闭.
但是,这也不是一个例子 partial
from functools import partial
a_10 = partial(add_nums, 10)
print a_10()(5)
15
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?
此外,装饰器用于向函数添加功能.
def add_nums(one):
def adder(two):
print "foo, bar"
return one+two
return adder
a_10 = add_nums(10)
print a_10(5)
foo, bar
15
Run Code Online (Sandbox Code Playgroud)
这三者有什么区别?
我正在使用以下代码片段:
from cape_privacy.pandas.transformations import Tokenizer
max_token_len = 5
@pandas_udf("string")
def Tokenize(column: pd.Series)-> pd.Series:
tokenizer = Tokenizer(max_token_len)
return tokenizer(column)
spark_df = spark_df.withColumn("name", Tokenize("name"))
Run Code Online (Sandbox Code Playgroud)
由于 Pandas UDF 仅使用 Pandas 系列,我无法max_token_len在函数调用中传递参数Tokenize("name")。
因此我必须max_token_len在函数范围之外定义参数。
这个问题中提供的解决方法并没有真正的帮助。此问题是否还有其他可能的解决方法或替代方案?
请指教