Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何定义';做两次';使用'*args';?_Python - Fatal编程技术网

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