python 函数封装

主要是利用globals()

下面先简单介绍globals() 和 locals(),返回dictionary,都是记录变量的轨迹。

两者类似,差异在作用域不同

locals 对应局部名字空间――特指当前函数或类的方法。
globals 对应全局名字空间――特指当前的模块。

回到原题,globals可以将全局空间的所有函数和变量的名字都作为key(字符串),值作为value记录下来,而通过这种方法既可以实现函数封装

不废话,上例子

#添加要执行的动作
def AddAction(name,*params):
    global g_funcAndParamMap
    print name
    g_funcAndParamMap[name] = [params]

#执行动作
def CallFunc(mapname,name):        
    try:
        if name in globals():   
            globals()[name](*mapname[name][0])    
        else:
            ExcMacroAction(mapname[name][0])  
    except:
        common.Log(name + ":" + str(mapname[name][0]))
        common.Log("exec error:"+ traceback.format_exc() + os.linesep)

mapname={“函数名称”,args1,args2,...}

name 特定的函数名称

首先通过AddAction将函数名(字符串)和参数(正常格式)添加到g_funcAndParamMap的map中;

然后 取特定函数名称调用CallFunc即可~


### Python 函数封装概述 函数封装是指将一组特定功能的代码打包成一个独立单元(即函数),从而提高代码的重用性和可维护性。Python 中可以通过定义函数并将其组织为模块或类的方法来实现封装。 以下是关于 Python 函数封装的最佳实践及其示例: --- #### 1. 使用简单函数进行基本封装 最基础的函数封装方式是通过 `def` 关键字定义函数,将重复使用的逻辑提取出来。这种方式适用于小型任务或单次调用的功能。 ```python # 定义一个计算两个数之和的函数 def add_numbers(a, b): return a + b result = add_numbers(5, 7) print(result) # 输出: 12 ``` 这种形式适合于简单的场景,但当涉及复杂逻辑时,可能需要进一步优化[^1]。 --- #### 2. 参数化与默认值设置 为了增强函数灵活性,可以在定义函数时为其参数指定默认值。这样即使某些参数未被显式传递,函数也能正常运行。 ```python # 带有默认参数的函数 def greet(name="World"): return f"Hello, {name}!" print(greet()) # 输出: Hello, World! print(greet("Alice")) # 输出: Hello, Alice! ``` 此方法能够减少不必要的错误,并简化调用过程[^2]。 --- #### 3. 将函数作为对象传递 在高级应用中,可以利用 Python 支持的第一级函数特性,即将函数本身当作变量或其他高阶函数中的参数传入。 ```python # 高阶函数示例:接受另一个函数作为输入 def apply_function(func, value): return func(value) def square(x): return x ** 2 result = apply_function(square, 4) print(result) # 输出: 16 ``` 这种方法体现了函数式编程的思想,有助于编写更加灵活和通用的程序结构。 --- #### 4. 结合装饰器实现动态行为修改 装饰器是一种特殊的语法糖,用于扩展已有函数的行为而不改变其原始定义。它非常适合用来添加日志记录、性能监控等功能。 ```python from functools import wraps def log_execution(func): @wraps(func) def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f"{func.__name__} was called with arguments {args}") return result return wrapper @log_execution def multiply(a, b): return a * b multiply(3, 4) # 输出: multiply was called with arguments (3, 4) ``` 使用装饰器可以让代码保持清晰的同时增加额外功能[^3]。 --- #### 5. 设计面向对象风格的封装 对于复杂的业务逻辑,推荐采用 OOP 方法设计类并将相关联的数据和操作集中管理起来。 ```python class Calculator: def __init__(self): self.result = None def add(self, a, b): self.result = a + b return self.result def subtract(self, a, b): self.result = a - b return self.result calc = Calculator() print(calc.add(10, 5)) # 输出: 15 print(calc.subtract(10, 5)) # 输出: 5 ``` 此类封装不仅便于理解还利于后续扩展新特性[^4]。 --- #### 6. 利用闭包隐藏内部状态 如果希望保护部分敏感信息不对外暴露,则可通过创建闭包达到目的。 ```python def make_counter(): count = 0 def counter(): nonlocal count count += 1 return count return counter counter_a = make_counter() print(counter_a()) # 输出: 1 print(counter_a()) # 输出: 2 ``` 这里展示了如何借助闭包机制维持局部作用域内的私密数据[^5]。 --- ### 总结 以上介绍了几种常见的 Python 函数封装技巧及其实现案例。合理运用这些技术可以帮助开发者构建出更具条理性的解决方案,同时也提升了整体系统的稳定性和适应能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值