Python 函数封装

自己在项目中用到的几个函数封装


1.北京时间转换为世界时

def BTC_to_UTC(btc_time):
    utc_struct = time.mktime([int(btc_time[0:4]),int(btc_time[4:6]),\
                              int(btc_time[6:8]),int(btc_time[8:10]),\
                              int(btc_time[10:12]),int(btc_time[12:14]),0,0,0])
    
    return time.strftime('%Y%m%d%H%M%S',time.gmtime(utc_struct)) + '%03s' %(btc_time[14:])

2.按照日期生成以一分钟为间隔的序列

strTimeBegin = datetime.datetime.strptime(dataListFirst,'%Y-%m-%d')
        strTimeEnd = strTimeBegin + datetime.timedelta(days = 1)
        strTimeMi = datetime.timedelta(minutes = 1)
        
        
        while strTimeBegin < strTimeEnd:
            dataListItem = [strTimeBegin.strftime('%Y-%m-%d'), strTimeBegin.strftime('%H:%M:%S.%f')[0:-3]]
            returnDataList.append(dataListItem)
            strTimeBegin = strTimeBegin + strTimeMi

3.平均值计算

for i in range(lenreDataList):
            if i < len(returnDataList) - 1:
                timeBegin = returnDataList[i][1]
                timeEnd = returnDataList[i + 1][1]
            else:
                timeBegin = returnDataList[i][1]
                timeEnd = '23:59:59:999'
                
            dataListTemp = []
            for j in range(lenDataList):
                if dataList[j][1] > timeBegin and dataList[j][1] < timeEnd:
                    dataListTemp.append(dataList[j])
            
            for e in avgList:
                iCount = 0.0
                addValue = 0.0
                for k in range(len(dataListTemp)):
                    if dataListTemp[k][e] != self.errorValue:
                        addValue += float(dataListTemp[k][e])
                        iCount += 1.0
                if iCount != 0.0:
                    avgValue = '%.2e' %(addValue / iCount)
                else:
                    avgValue = -999.9
                returnDataList[i].append(avgValue)
        return returnDataList          


### 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、付费专栏及课程。

余额充值