一、生成器

1、生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

def A():
    for i in range(10):
        yield i #将函数变成一个迭代器(生成器)
a=A()
print(next(a))
print(next(a))

 

2、try

尝试执行try中的代码,如果有错,则被except捕获,但是整个程序不会崩溃
ef A():
    for i in range(5):
        yield i       
try:
    a=A()
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
except Exception as e:
    print(e)
print('jxh')

 

二、不定长参数

1、*args位置传参

*args返回的是元组

def haha(*args):
    print(args)
haha(1,3,5)

输出:(1,3,5)#元组

 

2、**kwargs带参数名称的传参

**kwargs返回的是字典

def haha(**kwargs):
     print(kwargs)
 haha(a=1,b=2,c=3)

输出:{'a': 1, 'b': 2, 'c': 3} #字典 
| |
键名 键值

 

3、*args和**kwargs混合用法

注意*args一定要放在前面

def xixi(*args,**kwargs):
    print(args)
    print(kwargs)
 xixi(1,2,3,a=1,b=2,c=3)
输出:(
1, 2, 3) {'a': 1, 'b': 2, 'c': 3}

 

4、装饰器代参实例

def deco1(param):
    print(param)
    def deco(func):
        def warp(*args,**kwargs):
            print(args)
            print(kwargs)
            kwargs['name2']=10
            return func(*args,**kwargs)
        return warp
    return deco
@deco1(100)
def lele(name2):
    print(name2)
lele(name2='jxh')
输出:
100 () {'name2': 'jxh'} 10

 

三、并发和并行的区别

并行:两个或多个事件在同一时刻发生;

并发:两个或多个事件在同一时间间隔内发生。

在操作系统中个,并发是指一个时间段中有几个程序都处于已启动到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

在网络服务器上,并发是指同一时刻能处理的连接数。比如服务器建立了100个TCP连接,即服务器同时维护了100个socket,那么并发量就是1000。

并发的关键是有处理多个任务的能力,不一定要同时。

并行的关键是有同时处理多个任务的能力。

高并发:短时间内大量访问和请求。

四、进程和线程

1、进程就是一个程序在一个数据集上的一次动态执行过程

2、一个进程还可以拥有多个并发的执行线索,简单的说就是拥有多个可以获得CPU调度的执行单元,这就是所谓的线程

 3、进程和线程的关系:

(1)简而言之,一个程序至少有一个进程,一个进程至少有一个线程。

(2)线程的划分尺度小于进程,使得多线程程序的并发性高。

(3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,而极大的提高了程序的运行效率。

(4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

    但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

(5)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

         但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的主要区别。

线程和线程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正好相反。线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

 

  实例1:

def count(func):
    def warp(*args,**kwargs):
        num = kwargs['num']
        if num > 4:
            print('404')
        else:
            return func(*args,**kwargs)
    return warp
    

@count
def page_1(num):
    print('页面详情')

if __name__ == '__main__':
    for i in range(10):
        page_1(num = i)

 

实例2: 检验密码是否合法: 1、必须含有大写

                                                2、必须含有小写

                                                3、必须含有数字

                                                4、还有一个装饰器统计密码输入次数(不对的情况)

import re
for i in range(5):
    pwd = input("请输入您的密码:")
    if len(pwd) <5 and len(pwd) >18:
        print("密码长度为5到18位")
    else:
        if re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$",pwd)==None:
            
            print('密码必须包含大小写字母和数字')
            
        else:
            print ("密码格式正确")
            break
            
else:
    print("您今天最多可以输错五次")

 

posted on 2019-08-09 17:57  胖虎很壮  阅读(156)  评论(0编辑  收藏  举报