首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在其他函数中使用内部函数

在其他函数中使用内部函数
EN

Stack Overflow用户
提问于 2021-12-21 13:12:30
回答 5查看 102关注 0票数 1

我需要使用在其他函数中定义的函数。_f1是在f中定义的,在f2中可以使用_f1吗?

代码语言:javascript
复制
def f():
    def _f1():
        return "f1"
    return _f1()

def f2():
  return f._f1()

print(f2())
EN

回答 5

Stack Overflow用户

发布于 2021-12-21 13:29:27

这里有很多东西混在一起。要运行_f1函数,首先必须从f返回它。但是您正在调用它,所以从f返回的是_f1的返回值。

若要在函数外部调用_f1,请使用:

代码语言:javascript
复制
def f():
    def _f1():
        return "f1"
    return _f1    

def f2():
  return f()()

print(f2())    

正如您所看到的,f2现在正在调用f,它正在返回_f1而不执行它。然后,您可以“执行此返回值”(这就是()()出现的原因,实际上是同时调用两个函数),而ta-da则是在函数f之外调用_f1

票数 3
EN

Stack Overflow用户

发布于 2021-12-21 13:26:41

我看到三个选择:

  1. 在函数运行之前声明一个变量,然后将新函数传递给该变量。现在您可以从另一个函数访问它:
代码语言:javascript
复制
func_variable = None

def f():
    def _f1():
        return "f1"
    func_variable = _f1

def f2():
  return func_variable()

print(f2())   
  1. 返回内部函数并执行它。
代码语言:javascript
复制
def f():
    def _f1():
        return "f1"
    return _f1

def f2():
  inner_func = f()
  return inner_func()

print(f2())   
  1. 把它变成一个类
代码语言:javascript
复制
class InnerFuncClass:
    inner_func = None

    def __init__(self):
        def _f1():
            return "f1"
        self.inner_func = _f1

f = InnerFuncClass()

def f2():
  return f.inner_func()

print(f2())   

顺便说一句,Python中不需要分号。

票数 2
EN

Stack Overflow用户

发布于 2021-12-21 13:25:12

你要找的是一门课。

代码语言:javascript
复制
class f:
    def __new__(self):
        return f._f1()
    @staticmethod
    def _f1():
        return 'f1'

def f2():
    return f._f1()

print(f())
>>> 'f1'
print(f2())
>>> 'f1'

虽然其他答案是正确的,但我认为应该考虑一个更复杂的问题。例如,如果函数f具有它使用的多个内部函数,并且它返回1值。在这种情况下,仅在其他函数中使用所有子函数是不合理的。

使用此解决方案,您可以创建多个子函数,并在调用类f() (在__new__函数中定义)时只返回一个值。

例如,当您想要计算圆周乘以一个圆的面积时:

代码语言:javascript
复制
import math
class f:
    def __new__(self, radius):
        circumference = self.circumference(radius)
        area = self.area(radius)
        return circumference * area
    @staticmethod
    def circumference(radius):
        return math.pi * 2 * radius
    @staticmethod
    def area(radius):
        return math.pi * radius**2

def area(radius):
    return f.area(radius)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70436047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档