• 函数进阶


    有参装饰器

    def login_auth(func):    
        def wrapper(func):        
            def inner(*args, **kwargs):            
                res = func(*args, **kwargs)            
                return res        
            return inner    
        return wrapper
    @login_auth('vip用户')
    def index():    
        pass
    

    无参装饰器

    def wrapper(func):    
        def inner(*args,**kwargs):        
            res = func(*args, **kwargs)        
            return res    
        return inner
    @wrapper
    def index():    
        pass
    

    生成器

    生成器的本质:yield生成器是自定义的迭代器,本质是迭代器

    生成器的定义:在函数体自定义yield,调用函数时函数体内代码不会执行,当通过__next__()取值时才会执行函数体内代码,并且yield会返回一个结果(可以返回多次);

    yield的特点: 1.yield只能在函数体内定义 2.每次都往生成器添加一个值 3.可以保持暂停状态

    yield和return的区别:

    相同点:都有返回值

    不同点:return只能返回一次值(一次值可以是空,一个,多个),yield一次只能返回一个值,但可以返回多次。

    演练
    list1 = [1, 2, 3, 4] 
    list = list1.__iter__() 
    print(list.__next__())
    通过__next__()取值才会执行函数体内代码
    def func():
        print('from func')
        yield 'tank'
        print(func().__next__())
    def func():
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
        yield 6
    res = func()
    __next__()直接通过func()取值,只能取第一个,必须通过func()对象res才能实现迭代全部
    print(res.__next__())
    ......
    print(res.__next__())
    迭代器内部自动优化stopiteration报错
    def range_me(start, end, move=1):
        while start < end:#         
            yield start#         
            start += move# 
    res = range_me(1,5)
    for line in res:     
        print(line)
        for line in range_me(1,5,1):  
            print(line)
    

    面向过程编程

    面向过程编程自白:面向过程编程核心是’过程’二字,类似工厂流水线,即先做什么后做什么。

    优点: 复杂的问题流程化、简单化。

    缺点: 可扩展性差,牵一发而动全身。

    def get_user_pwd():    
        while True:        
            username = input('请输入用户名:').strip()        
            if username.isalpha():            
                break        
            else:            
                print('名字不合法')    
        while True:        
            password = input('请输入密码').strip()        
            re_password = input('请确认密码').strip()        
            if password == re_password:            
                break        
            else:            
                print('两次密码不一致')    
         return username, password
    
    def cut_user_pwd(user,pwd):    
        user_pwd_str = f'{user}:{pwd}
    '    
        return user_pwd_str
    
    def save_data(user_pwd_str):    
        with open('user.txt','a',encoding='utf8') as f:        
            f.write(user_pwd_str)
    def register():    
        user,pwd = get_user_pwd()    
         user_pwd_str = cut_user_pwd(user,pwd)    
         save_data(user_pwd_str)
    register()
    

    三元表达式

    将if…else分支变成一行

    语法:条件成立if返回左边的值,else不成立返回右边的值。

    num1 = 10
    num2 = 20 
    res = num1 if num1 > num2 else num2
    print(res)
    
    def max1(num1,num2):     
        res = num1 if num1 < num2 else num2
        return res
    res = max1(10,20)
    print(res)
    
    username = input('请输入用户名:').strip()
    new_username = username if username == 'lipeng' else username+'dsb'
    print(new_username)
    

    列表生成式

    list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]

    优点:可以依赖索引取值,取值方便

    缺点:浪费资源

    普通方式
    list = [1,2,3,4]
    new_lsit = []
    for line in list:
        new_lsit.append(line)
        print(new_lsit)
    列表生成式
    list1 = [f'{line}' for line in range(1,23)]
    print(list1)
    list1 = ['nick','tank','seaon']
    list = [ line + 'dsb' for line in list1]
    print(list)
    

    生成器表达式

    优点:节省资源

    缺点:取值不方便

    #为了节省空间连打印都不给显示了
    g = (line for line in range(1,1000))
    print(next(g))
    结果:<generator object <genexpr> at 0x000001839FDB0E08>
    

    匿名函数

    没有名字的函数,左边是参数,右边是返回值lambda:1

    因为没有名字,所以没有调用方法;

    匿名函数需要一次性使用,和内置函数更配哦。(单身狗是可耻的)

    内置函数

    range()、print()、len()等都是属于内置函数python内部提供的内置方法

    max, min, sorted, map, filter

    sorted 对可迭代对象进行排序 后面加reverse=true进行倒序排列

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    C语言的异常处理
    单例类模板
    智能指针模板
    数组类指针
    类模板
    函数模板
    shell 修改工作路径
    把目录C:Python34PCI_Codechapter2加到系统路径中
    twoSum
    归并排序
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863914.html
Copyright © 2020-2023  润新知