python笔记之函数

函数初探

python在要写出函数很简单,通过关键字def即可写出,简单示例如下

python 复制代码
def add(a, b):
    return a+b

以上即可以定义出一个简单的函数:接收两个变量a和b,返回a和b相加的结果,当然这么说也不全对,原因就是尽快python是强类型的语言,但同时也是动态类型的,示例中的函数对于入参没有限制类型,若a和b都是数字自然返回和;若是str,则是拼接了

python 复制代码
if __name__ == "__main__":
    add(1, 2) #3
    add('Hello', 'Python') #HelloPython

确定函数入参类型

要想在实际运行前就将函数的入参和返回类型确定下来,可以采用如下方法

python 复制代码
def add(a:int, b:int) -> int:
    return a+b

但是,以上方法亲测对应 add('Hello','Python')并无效果;这种情况下,就进行类型检查吧

python 复制代码
def add(a:int, b:int) -> int:
    if not isinstance(a, int) or not isinstance(b, int):
        raise ValueError("参数必须为整数")
    return a+b

装饰器语法糖

日常开发中,做API开发的小伙伴应该都碰到过在做接口对接、联调以及上线后故障排查时查找日志的情况,若是每个方法都进行日志打印(当然这种方法也不是不行)就过于重复了,python在很早的版本就引入了装饰器(这里要和设计模式中的装饰器模式区分下),具体实现如下

python 复制代码
def logging(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数{func.__name__},参数为:{args},{kwargs}")
        result = func(*args, **kwargs)
        print(f"函数{func.__name__}返回结果为:{result}")
        return result
    return wrapper

这样,在调用函数进行调试时,只需要加上@logging这个语法糖就行了

python 复制代码
@logging
def add(a:int, b:int) -> int:
    if not isinstance(a, int) or not isinstance(b, int):
        raise ValueError("参数必须为整数")
    return a+b

魔法函数之__call__

python 复制代码
class MyCall():
    def __init__(self, callable_obj):
        self.callable_obj = callable_obj

    def __call__(self, *args, **kwargs):
        print(f"调用函数{self.callable_obj.__name__},参数为:{args},{kwargs}")
        result = self.callable_obj(*args, **kwargs)
        print(f"函数{self.callable_obj.__name__}返回结果为:{result}")
        return result

f __name__ == "__main__":
    my_call = MyCall(add)
    my_call(4, 5)

类MyCall定义的魔法函数__call__,对于python解释器而言,MyCall的对象就是一个可调用的对象(具有和def定义的函数同等可执行的效果了)

相关推荐
Daily Mirror4 分钟前
Day 32 类的定义和方法
python
秋刀鱼 ..11 分钟前
第五届机电一体化、自动化与智能控制国际学术会议(MAIC 2025)
运维·人工智能·python·机器人·自动化·制造·新人首发
2501_9216494919 分钟前
亚太股票数据API:日股、韩股、新加坡股票、印尼股票市场实时行情,实时数据API-python
开发语言·后端·python·websocket·金融
Hello.Reader20 分钟前
用 Python 跑通第一个 Flink ML 项目KMeans 聚类从本地到集群实战
python·flink·kmeans
Wiktok24 分钟前
【WIT】解决导入pywinauto相关库会导致程序UI界面(tkinter/pyside6)浏览文件等操作卡住问题
python·ui·pywinauto
松莫莫29 分钟前
Nginx 学习笔记
笔记·学习·nginx
风123456789~38 分钟前
【健康管理】第12章 健康信息学 1/2
笔记·考证·健康管理
_Minato_44 分钟前
数据库知识整理——数据库控制功能
数据库·经验分享·笔记·软考·计算机系统
Arenaschi1 小时前
安卓显示翻转
android·网络·人工智能·笔记·其他
噔噔噔噔@1 小时前
详细介绍Python+Pytest+BDD+Playwright,用FSM打造高效测试框架
开发语言·python·pytest