【问题标题】:How to make parameter of function act like variable string methods如何使函数的参数像可变字符串方法一样
【发布时间】:2022-01-19 21:44:33
【问题描述】:

我想制作获取参数的函数并将其用作其中的方法。这是我尝试使用 string.upper() .lower() 方法做的事情。

def caps_lock(case, string):
    print(string.case())


string = 'Hello World'

caps_lock(upper, string)
caps_lock(lower, string)

预期结果

>HELLO WORLD
>hello world

【问题讨论】:

    标签: python methods parameter-passing


    【解决方案1】:

    你可以这样做:

    def caps_lock(func, string):
        print(func(string))
    
    
    string = 'Hello World'
    
    caps_lock(str.upper, string)
    caps_lock(str.lower, string)
    

    或者:

    def caps_lock(thunk):
        print(thunk())
    
    
    string = 'Hello World'
    caps_lock(string.upper)
    caps_lock(string.lower)
    

    从技术上讲,这也是一种选择,但我不建议这样做:

    def caps_lock(func_name, string):
        print(getattr(string, func_name)())
    
    
    string = 'Hello World'
    caps_lock("upper", string)
    caps_lock("lower", string)
    

    在所有这些情况下,caps_lock 函数并没有强制它将字符串大写或小写;您可以传递任意函数,它会在字符串上打印运行该函数的结果。

    另请注意,必须将函数传递给 caps_lock 并不能真正为您节省任何精力,而不仅仅是自己调用函数:

    string = 'Hello World'
    print(string.upper())
    print(string.lower())
    

    如果您想要一个在打印之前专门只对字符串进行大写或小写的函数,则必须在 caps_lock 的主体内指定这些函数,如下所示:

    def caps_lock(on, string):
        print(string.upper() if on else string.lower())
    
    
    string = 'Hello World'
    caps_lock(True, string)
    caps_lock(False, string)
    

    【讨论】:

      【解决方案2】:
      def do(obj,method,*params):
          getattr(obj,method)(*params)
          
      class Testobj:
          def bla(self,*args):
              print("bla")
              print(args)
      
      do(Testobj(),"bla",1,2,3,4)
      

      #打印: 布拉 (1, 2, 3, 4)

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2014-12-18
      相关资源
      最近更新 更多