python functools.partial_python 中 functools.partial 的参数用法疑惑

我已经知道的

我们知道可以这样来用partial

import functools

int2 = functools.partial(int, base=2)

print(int2('10001'))

# Output: '17'

int 函数的解释如下:

class int(object)

| int(x=0) -> integer

| int(x, base=10) -> integer

|

| Convert a number or string to an integer, or return 0 if no arguments

| are given. If x is a number, return x.__int__(). For floating point

| numbers, this truncates towards zero.

我对 partial 参数的理解是,加入这么写

functools.partial(func, arg1)

则指定 func 最靠左的那个参数为 arg1

def fun(x, y, z):

print('x: {0}; y: {1}; z: {2}'.format(x, y, z))

f1 = functools.partial(fun, 1)

f1(2, 3)

# Output: 'x: 1; y: 2; z: 3'

我们也可以通过在 parital 中通过指定默认参数来绑定 func 中的参数值

f2 = functools.partial(fun, z=3)

f2(2, 1)

# Output: 'x: 2; y: 1; z: 3'

我的问题

sum_100 = functools.partial(sum, start=100)

print(sum_100([1, 2, 3]))

#TypeError: sum() takes no keyword arguments

sum 函数的说明:

sum(iterable, start=0, /)

Return the sum of a 'start' value (default: 0) plus an iterable of numbers

When the iterable is empty, return the start value.

This function is intended specifically for use with numeric values and may

reject non-numeric types.

既然这样对 sum 函数不行,为什么能成功作用于 int 了

import functools

int2 = functools.partial(int, base=2)

print(int2('10001'))

# Output: '17'

int 函数的解释如下:

class int(object)

| int(x=0) -> integer

| int(x, base=10) -> integer

|

| Convert a number or string to an integer, or return 0 if no arguments

| are given. If x is a number, return x.__int__(). For floating point

| numbers, this truncates towards zero.

你可能感兴趣的:(python)