apply call区别
时间: 2023-08-09 20:04:53 浏览: 146
在Python中,apply和call都是用于调用函数的方法。
apply函数在Python 2.x版本中存在,而在Python 3.x版本中已经被废弃。它接受一个函数和一个元组作为参数,元组中包含函数的参数。例如:
```python
def add(a, b):
return a + b
result = apply(add, (2, 3))
print(result) # 5
```
上述代码使用apply调用了add函数,并传递了一个元组(2, 3)作为参数,最终返回结果5。
而call函数则是在Python中调用函数的另一种方式。它接受一个函数和任意个参数作为参数,并将这些参数传递给函数。例如:
```python
def add(a, b):
return a + b
result = add.call(2, 3)
print(result) # 5
```
上述代码使用call调用了add函数,并传递了两个参数2和3,最终返回结果5。
需要注意的是,在Python 3.x版本中,已经没有apply函数了,只能使用call或直接调用函数来传递参数。
相关问题
bind apply call区别
在JavaScript中,`bind()`, `apply()`, 和 `call()` 都是用来改变函数内部 `this` 关键字指向的对象,但它们之间有细微的区别:
1. **bind()**:它返回一个新的函数,这个新函数拥有指定的上下文(即 this 的值)。当你调用这个新的函数时,它的 `this` 就绑定到你提供的上下文中。例如:
```javascript
const obj = {name: 'John'};
const func = function() {
console.log(this.name);
};
const boundFunc = func.bind(obj); // boundFunc 的 this 现在关联到 obj
boundFunc(); // 输出 "John"
```
2. **apply()**:它接收两个参数,第一个参数是要作为 `this` 的对象,第二个参数是一个数组,包含了函数需要的所有参数。`apply()` 直接修改了当前函数内部的 `arguments` 对象。例如:
```javascript
func.apply(obj, ['Doe']); // 这里 'Doe' 替换了原函数中的 this.name
```
3. **call()**:与 `apply()` 类似,`call()` 也接受两个参数,第一个参数是 `this` 的值,第二个参数是传给函数的实际参数数组。但它会创建一个新的执行上下文,而不是直接操作 `arguments`。例如:
```javascript
func.call(obj, 'Doe'); // 相同效果,将 'Doe' 绑定为 this,并调用 func
```
apply call bind
`apply`, `call`, 和 `bind` 都是 JavaScript 中用于调用函数的方法。
`apply` 和 `call` 都是用来改变函数执行时的上下文(即 this 的指向)的。它们的第一个参数都是要绑定给 this 的值。`apply` 的第二个参数是一个数组,它会被作为函数的参数传入;而 `call` 的第二个到第 n 个参数是直接传入函数的参数。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(addNumbers.apply(null, numbers)); // 6
console.log(addNumbers.call(null, ...numbers)); // 6
```
`bind` 方法也可以用来改变函数执行时的上下文,但是它不会立即执行函数,而是返回一个新的函数,这个函数的 this 值会绑定到 bind 的第一个参数。bind 的第二个到第 n 个参数也会被作为函数的参数传入。这个新函数可以稍后执行。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const addTwoNumbers = addNumbers.bind(null, 1, 2);
console.log(addTwoNumbers(3)); // 6
console.log(addTwoNumbers(4)); // 7
```
在这个例子中,`addTwoNumbers` 是一个新函数,它的 this 值被绑定到了 null,前两个参数被固定为 1 和 2。我们可以多次调用这个新函数,并传入第三个参数。
阅读全文