学习python的第五天

进程和线程
今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先讨论两个概念,一个叫进程,一个叫线程。

概念
进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据,操作系统管理所有进程的执行,为它们合理的分配资源。进程可以通过fork或spawn的方式来创建新的进程来执行其他的任务,不过新的进程也有自己独立的内存空间,因此必须通过进程间通信机制(IPC,Inter-Process Communication)来实现数据共享,具体的方式包括管道、信号、套接字、共享内存区等。

import multiprocessing
def A():
    print('hello')


if __name__ == "__main__":
   #创建进程
   p = multiprocessing.Process(target)
   p.start()  #启动进程
   p.join()
   print('Over')
   


Python进阶
1.PEP8编码规范,以及开发中的一些惯例和建议
(1)代码编排:
a.缩进4个空格,禁止空格与Tab混用
b.行长80:防止单行逻辑过于复杂
(2)import
a.不要使用from xxx import *
b.顺序
标准库
第三方库
自定义库
c.单行不要import多个库
d.模块内用不到的不用去import
(3)命名
a.除非在lambda函数中,否则不要用单字母的变量名
b.包名、模块名、函数名、方法名全部使用小写,单词间用下划线连接
c.类名,异常名使用首字母大写的方式
d.全局变量尽量使用大写,一组同类型的全局变量要加上统一前缀,单词用下划线连接。
(4)字符串拼接尽量使用join方式:速度快,内存消耗小
(5)语义明确,直白
a.xx not in yy
b.a is not b
2.*args返回的是元组,*kwargs返回的是字典
(1)函数定义
def foo(*args,**kwargs):
pass
(2) 参数传递

def foo(x,y,z,a,b):
    print(x)
    print(y)
    print(z)
    print(a)
    print(b)
1st = [1, 2, 3]
dic = {'a':22,'b':77}
foo(*1st,**dic)

3.Python的赋值和引用
(1)==:判断的是值,is:判断的是内存地址(即对象的id)
(2)copy:只拷贝表层元素
deepcopy:在内存中重新创建所有子元素
4.装饰器
(1) 示例:

def deco(func):
    #print(func)
    #print("lalala")
    def wrap():
        print('登录失败')
        return func()
    return wrap
@deco
def A():
    print('Joker')
@deco
def B():
    print('Joker2')
A()
B()   #输出登录失败
            Joker
           登录失败
            Joker2

(2)输出两个数字,装饰器的作用是求这两个数字的和,本函数的作用是打印这两个数字的和

def deco(func):
    def wrap(n,n1):
        sum_ = n + n1
        return func(sum_,n1)#A()
    return wrap
@deco
def A(name,name2):
    print(name)
A(10,20) #输出30

(3)在使用装饰器的情况下,无论你输入什么验证码都返回验证码错误,如果不使用,该正确就打印正确

import random
def deco(func):
    def warp(n1,n2):
        n1 = -1
        return func(n1,n2)
    return warp
#@deco
def A(n1,n2):
    if n1 == n2:
        print('验证码正确')
    else:
        print('验证码错误')
num = random.randrange(1000,9999)
print('验证码是:%d'%num)
num2 = int(input('>>'))
A(num,num2)

(4)404,请求网页成功

import time
TIME1 = 0
TIME2 = 0
def check_ip(func):
    def warp(*args,**kwargs):
        if round(abs(TIME2-TIME1),3)<0.5:
            print('404')
        else:
            return func(*args,**kwargs)
    return warp
@check_ip
def A(ip):
    print('进入网页成功')
#模拟请求
for _ in range(50):
    ip = '127.0.0.1'
    TIME1 = time.time()
    A(ip)
    TIME2 = time.time()
    time.sleep(1)

5.函数闭包
示例:

def foo():
    l = []
    def bar(i):
        l.append(i)
        return l
    return bar
f1 = foo()
f2 = foo()
f1(1)
f1(2)
f2(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值