Python 调用';函数中的另一个函数

Python 调用';函数中的另一个函数,python,Python,更具体地说,我想从内部调用函数get_hours_worked 计算工资总额。我意识到另一种方法是将参数传递到calc_gross_pay,但我想知道我所尝试的是否可行。我觉得不是。谢谢你的帮助 def main(): # print("This employee's gross pay for two weeks is:",calc_gross_pay()) def get_input(): def get_hours_worked(): #get_hou

更具体地说,我想从内部调用函数get_hours_worked 计算工资总额。我意识到另一种方法是将参数传递到calc_gross_pay,但我想知道我所尝试的是否可行。我觉得不是。谢谢你的帮助

def main():
#
    print("This employee's gross pay for two weeks is:",calc_gross_pay())


def get_input():

    def get_hours_worked():
        #get_hours_worked
        x = float(input("How many hours worked in this two week period?     "))
        return x

    def get_hourly_rate():
        #get_hourly_rate()

        y = float(input("What is the hourly pay rate for this employee? "))
        return y

def calc_gross_pay():
    #
    gross = get_input(get_hours_worked) * get_input(get_hourly_rate)
    return gross

main()

这是代码的重组版本。我们没有定义
get\u hours\u worked
get\u hourry\u rate
内部
get\u input
而是将它们定义为调用
get\u input
的单独函数

def get_input(prompt):
    return float(input(prompt))

def get_hours_worked():
    return get_input("How many hours worked in this two week period? ")

def get_hourly_rate():
    return get_input("What is the hourly pay rate for this employee? ")

def calc_gross_pay():
    return get_hours_worked() * get_hourly_rate()

def main():
    print("This employee's gross pay for two weeks is:", calc_gross_pay())

main()
演示

How many hours worked in this two week period? 50
What is the hourly pay rate for this employee? 20.00
This employee's gross pay for two weeks is: 1000.0
正如所指出的,最好改变层次结构本身。但如果您仍需要相同的,请按以下步骤进行:

def get_input():

    def get_hours_worked():
        x = float(input("How many hours worked in this two week period?     "))
        return x

    def get_hourly_rate():
        y = float(input("What is the hourly pay rate for this employee? "))
        return y

    return get_hours_worked, get_hourly_rate                         # IMP

def calc_gross_pay():
    call_worked, call_rate = get_input()                             # get the functions
    gross = call_worked() * call_rate()                              # call them
    return gross     


def main():
    print("This employee's gross pay for two weeks is:",calc_gross_pay())

    #How many hours worked in this two week period?  3
    #What is the hourly pay rate for this employee?  4
    #This employee's gross pay for two weeks is: 12.0

main()

在函数中声明函数有什么具体原因吗?没有,名称
get\u hours\u worked
get\u hourry\u rate
get\u input
的本地名称。如果您想访问
get\u input
之外的那些函数,您需要返回它们。但是,为什么要在
get\u input
中定义这些函数呢?为什么要在调用
get\u input(get\u hours\u worked)
时调用
get\u hours\u worked()
完成工作?在您的示例中,
get\u input
什么都不做。我试图从这个图表中编程,我了解变量是如何在函数中本地的,不能从函数外部访问。从你所说的,函数内部的函数也是如此。我的逻辑是,通过调用get_输入函数,它会要求用户输入。按照层次结构图的制作方式,我假设get_hours_worked是get_input下的一个函数。因此,如果你调用get_input和get_hours_worked,你可以将该值传递给calc_gross_pay。你可以通过让
get_input
返回你想要调用的函数,基本上创建一个闭包,然后保存返回的函数以供以后调用,但这是导出函数的一种非常复杂的方法。谢谢。这更有意义。我误解了文本中的层次结构图。哦,哇,这样行吗?所以当你说“打电话上班”时,你的意思是“上班时间”吗?我只是想确定“通话”不是关键词。然后将赋值运算符与get_input()一起使用。这很奇怪。“=”是否仍作为赋值运算符?编辑:现在我仔细看了一下,似乎call_是一个局部变量。因为有两个变量,call_worked和call_rate,它们从get_输入接收返回值。我猜他们会按照返回的顺序接收返回的日期?是的,你的第二个猜测(编辑部分)说到点子上了。
get\u input
的返回值是两个函数,分配给两个变量
call\u worked
call\u rate
。我们使用它访问函数。