Python 如何定义';做两次';使用'*args';?
我已经编写了一个代码来重复函数过程:Python 如何定义';做两次';使用'*args';?,python,Python,我已经编写了一个代码来重复函数过程: def do_twice(func, *args): func(func(args)) def div(number): print(number[0]/2) do_twice(div, 8) 预期产出为: 4.0 2.0 4.0 TypeError: 'NoneType' object is not subscriptable 但结果是: 4.0 2.0 4.0 TypeError: 'NoneType' object is not
def do_twice(func, *args):
func(func(args))
def div(number):
print(number[0]/2)
do_twice(div, 8)
预期产出为:
4.0
2.0
4.0
TypeError: 'NoneType' object is not subscriptable
但结果是:
4.0
2.0
4.0
TypeError: 'NoneType' object is not subscriptable
在这一点上,我想:似乎第二轮的number
是None
。
我的猜测被证明是正确的:
…
def div(number):
print(number) # i know, actually i shouldn't call it div NOW...
# output:
4
None
我的错是什么?提前感谢。它不需要太多的更改就可以修复
def do_twice(func, *args):
func(func(args[0]))
def div(number):
result = number/2
print(result)
return result # Return the result
do_twice(div, 8)
div
需要返回其计算结果,以便在第二次迭代中由do\u存储两次。否则,您的直觉是正确的,您在第二次执行div
时正在划分None
关键在于:
返回使函数外部的值可以访问。它不需要太多的更改就可以修复
def do_twice(func, *args):
func(func(args[0]))
def div(number):
result = number/2
print(result)
return result # Return the result
do_twice(div, 8)
div
需要返回其计算结果,以便在第二次迭代中由do\u存储两次。否则,您的直觉是正确的,您在第二次执行div
时正在划分None
关键在于:
返回使值可以在函数外部访问。您忘记了从函数返回某些内容:
def do_twice(func, *args, **kwargs):
return func(func(*args, **kwargs))
def div2(n):
x = n / 2
print(x) # For debugging. A function like this normally would not print.
return x
do_twice(div2, 8)
您忘记了从函数返回某些内容:
def do_twice(func, *args, **kwargs):
return func(func(*args, **kwargs))
def div2(n):
x = n / 2
print(x) # For debugging. A function like this normally would not print.
return x
do_twice(div2, 8)
在调用func(func(args))
中,函数func
不返回任何值。因此,func(args)
没有在外部调用中为func
提供所需的number
参数
函数div
应修改如下
def div(编号):
打印(编号[0]/2)
返回[编号[0]/2]
在调用func(func(args))
中,函数func
不返回任何值。因此,func(args)
没有在外部调用中为func
提供所需的number
参数
函数div
应修改如下
def div(编号):
打印(编号[0]/2)
返回[编号[0]/2]
Te问题在于,当第一次调用'div'时,它获取args作为输入,并且正在查找args[0]。对“div”的秒调用将返回一个数字,args[0]将失败
下面的代码似乎有效:
def do_twice(func, *args):
return func(func(args))
def div(number):
return number[0] / 2 if isinstance(number, tuple) else number / 2
print(do_twice(div, 8))
问题是,当第一次调用'div'时,它获取args作为输入,并且正在查找args[0]。对“div”的秒调用将返回一个数字,args[0]将失败
下面的代码似乎有效:
def do_twice(func, *args):
return func(func(args))
def div(number):
return number[0] / 2 if isinstance(number, tuple) else number / 2
print(do_twice(div, 8))
这里有几个问题-第一个是函数div
没有return
语句。这就是NoneType
错误的来源-div
在默认情况下返回None
。这里有一些问题-第一个问题是函数div
没有return
语句。这就是NoneType
错误的来源-div
默认返回None
。