美文网首页
Python基础-day08

Python基础-day08

作者: 陈small末 | 来源:发表于2019-01-11 08:56 被阅读0次

list

​ 可变参数

​ 关键字参数

​ 匿名函数

​ 闭包

​ 偏导函数

​ 装饰器

可变参数

​ 函数的参数个数名字 无法确定 但是又要参与到函数的代码逻辑里

​ 可变参数声明:

    def fun(*args):
        这个args在函数里 就变成了一个元组

​ 使用

方式1 fun(1,2,3,4,5,53,3)
方式2 my_data = (1,2,3,4,5,53,3)
     fun(*my_data)
求N个数的和
def sum_n(*args):
    print(args)
    sum = 0
    # 遍历参数元组
    for i in args:
        # 累计求和
        sum += i
    return sum

关键字参数

​ 他也是可变参数的一种形式 只不过 他可以指定具体参数的名字, 在函数内 去调用

​ 定义:

    def fun(**kwgs):
        print(type(kwgs))

使用场景

​ 当我们的函数 不确定有多少参数的时候

​ 当我们不关注可变参数的名字的时候的使用 *

​ 当我们关注这些可变参数的参数名字的时候 使用两个*

匿名函数

​ 没有名字的函数

​ 不用考虑函数命名,针对于那些 逻辑简单 并且只是用一次的函数

​ 写法:

    fun = lambda 参数1, 参数2, 参数N: 逻辑

​ 冒号后面的相当于普通函数的return

偏导函数

​ 作用:帮我们’冻结‘函数的参数,然后得到新的函数 在调用得到的新的函数时 之需要写剩余的参数就可以

​ 使用:

partial(函数名,*args, **kwargs)
from functools import partial
以int()函数为例  将int函数参数base变成2
int2 = partial(int, base=2)  #int 是我们需要处理的函数 base=2是该函数 我们想默认值的
int2("1011")

练习

print_new = partial(print, end="!", sep="+")
print_new("sjs", "jj")
print_new("sjs")

闭包

在函数A声明的时候 又在其内部声明了函数B 并且A的返回值是B

def fun():
    print("执行中")

    def inner():
        print("内部函数")
    return inner
    
调用:
    res = fun()
    此时的res是inner函数
    所以 我们还可以继续去调用res
    res()

变量:局部变量 全局变量

global 关键字 
    在函数内用global修饰的变量是全局变量  
    
a = 10
def fun1():
    global a
    a=6

fun1()
print(a) ---》打印的结果就变成6了
nonlocal 关键字
    在闭包中 如果内部函数想去修改外部函数的变量,那我们就需要使用nonlocal来修饰我们想要修改的变量
例子如下:
    def fun3():
        b = 10
        def inner():
            nonlocal b
            b = 5
        inner()
        print(b)
        return inner

装饰器(非常非常非常重要)

在原有函数的基础上 在不动原函数代码的情况下增加额外的功能

装饰器写法:

def my_time(函数参数):
    def inner():
        原有函数之前的逻辑
        fun()
        原有函数之后的逻辑代码
    return inner

调用

在函数声明上面使用@装饰器函数名

@my_time
def t1():
    time.sleep(1)
    print("特别牛的代码")

那么此时t1已经被指向到了装饰器的内部函数inner

那么再调用t1的时候 就变成了调用inner

被装饰的函数有参数

def decorator_one(fun):

    def my_fun(a, *args, **kwargs):
        fun(a)

    return my_fun

@decorator_one
def test1(a):
    print("a is %s" % a)

test1("s")

被装饰的函数有参数 有返回值

def decorator_one(fun):
    def inner(a, *args, **kwargs):
        res = fun(a)
        print("我在这", res)
        return res
    return inner

装饰器带参数(选修)

def out(装饰器需要的参数):
    def dec_two(fun):
        def inner(*args):
            if 装饰器参数 写一些逻辑:
                fun(*args)
            else:
                print("权限不够")
        return inner
    return dec_two

多装饰器调用(选修)

多个装饰器装饰一个函数的时候是从内向外进行装饰的

练习

​ 假设现在又一个用户

users = {"tom": {"pwd":"000000", "per":1}, "bob":{"pwd": "666666", "per":3}}

修改密码:需要先验证老密码是否正确 如果不正确不能改

相关文章

网友评论

      本文标题:Python基础-day08

      本文链接:https://www.haomeiwen.com/subject/jchvrqtx.html