函数传递/字典推导式/切面编程AOP/鸭子类型/函数重载

一、Python的函数传递

         1、类型是属于对象的,而不是变量

         2、对象有两种:不可更改,strings, tuples, 和numbers;可以修改的对象:list, dict, set

         3、当一个引用传递给函数,函数自动复制一份引用,函数里的引用和外边的引用没有半毛关系。所以当函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没被修改;当函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改。

        示例代码如下:

a = 1
def fun(a):
    a = 2
fun(a)
print(a)

输出a 为1

# ------------------
a = []
def fun(a):
    a.append(1)
fun(a)
print(a)
输出a 为[1]

二、Python字段推导式

        注:类似列表推倒试,以键值对方式推倒 用符号“:”隔开,返回字典,语法如下

        1、遍历过滤字典:并支持condition判断 和key、value修改 如 value+"str 、key.lower()

                data = {key: value for key, value in dict.items() if condition}

        2、遍历数组

               data = {key: value for key, value in list if condition}

        3、合并数组:

                arr1 = ["小明", "小红"]

                arr2 = ["男", "女"]

                data = {key: value for key, value in zip(arr1, arr2)}

                输出:data = {'小明': '男', '小红': '女'}

        4、字典同字母key(忽略大小写)求和

                dict_a = {'a': 2, 'B': 5, 'A': 7, 'C': 10}

                data = {key.lower(): dict_a.get(key.lower(), 0) + dict_a.get(key.upper()) for key in dict_a.keys() if key.lower() in ["a", "b"]}

三、面向切面编程AOP和装饰器

        装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。

四、鸭子类型

        描述:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

        作用:动态语言中经常使用,非常灵活,使得python不像java那样专门去弄一大堆的设计模式

五、Python 函数重载

        可变参数类型。
        可变参数个数。
        基本设计原则:仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

        那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。

        对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。

        鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值