Python中函数后面又加一个参数是什么意思?
代码如下:
input_tensor = Input(shape=(64,))
x = layers.Dense(32, activation='relu')(input_tensor)
给个关键字我去查一下也是好的^_^
这种函数式语言对 java 程序员太不友好了~~~
Python中函数后面又加一个参数是什么意思?
因为函数的返回值还是个函数
在Python里,函数后面又加一个参数,通常指的是函数调用时传递的参数,或者函数定义时接收的参数。我猜你更可能是在问函数调用时的“额外”参数。这主要有两种情况:
1. 调用时传递了比定义更多的参数
这会导致 TypeError。比如:
def add(a, b):
return a + b
result = add(1, 2, 3) # TypeError: add() takes 2 positional arguments but 3 were given
2. 使用 *args 和 **kwargs 接收可变参数
这才是关键。如果函数定义时用了 *args(接收任意数量的位置参数)或 **kwargs(接收任意数量的关键字参数),那么调用时就可以传递“额外”的参数。
def func(a, b, *args, **kwargs):
print(f"a: {a}, b: {b}")
print(f"其他位置参数 args: {args}")
print(f"其他关键字参数 kwargs: {kwargs}")
# 调用
func(1, 2, 3, 4, 5, name='Alice', age=30)
输出:
a: 1, b: 2
其他位置参数 args: (3, 4, 5)
其他关键字参数 kwargs: {'name': 'Alice', 'age': 30}
这里,1 和 2 分别赋给 a 和 b,多出来的位置参数 (3, 4, 5) 被打包成元组传给 args,多出来的关键字参数 {'name': 'Alice', 'age': 30} 被打包成字典传给 kwargs。
另一种常见情况:为装饰器传递参数
装饰器本身是一个返回函数的函数。有时你会看到 @decorator(arg) 这种用法,这其实是先调用 decorator(arg) 返回一个真正的装饰器函数,再用它去装饰目标函数。
def repeat(num_times):
def decorator_repeat(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator_repeat
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("World")
# 会打印三次 Hello World
这里 @repeat(num_times=3) 中的 (num_times=3) 就是给装饰器工厂函数 repeat 传递的参数。
**总结:多出来的参数要么会报错,要么是被 *args/kwargs 捕获,或者是装饰器的参数。
柯里化
1 楼正解
返回值是个函数
python 里不光函数能调用,callable 的对象也能像函数那样调用
对象想要 callable,只需要它的类实现__call__()方法即可,,这样 objectA()就相当于 objectA.call()
JAVA 也能这么用的
Java 也能这么用的
难怪觉得有点眼熟,scala 里面就是这样的
java 怎么这样用的?根本不支持函数式啊,lambda 不能算吧
哦呵呵,明白了
感谢大佬,我后来想了想,只能这样解释了
Dence 可能是一个闭包结构,返回的是内层函数的引用,再加一个括号就形成内层函数的调用
,这不是 curry
curry 是 f(a,b,c)也可以写作 f(a)(b)©
Python 里少参数会直接报错的
克里化效果跟这个是一样的,也是返回一个函数来处理后面的参数
你把 mx1700B 了吧?咱俩看到的不是一个一楼
不,单纯点错人了,抱歉
重新点一下
这不是 curry,参见楼上上我说的
传入一个参数返回一个函数(这个函数再传入一个函数可以返回一个函数或返回结果)这样的过程就是 curry,无非有的语言有语法糖支持(比如 ML 系直接 fun a b c,racket 的(define (((f x) y) z)…)等等)有的语言没有罢了
当然没有语法糖支持的语言里用 curry 很蛋疼就是了…
确实是我用词不是很准确,但是确实这应该算 curried function,具体也可以参考你给的 wiki


