Study python Day05

建议

一  代码编排:
	缩进4个空格,禁止空格与Tab混用
	行长80:防止单行逻辑过于复杂
	
二 import
	1.不要使用 from xxx import
	2.顺序
		1.标准库
		2.第三方库
		3.自定义库
	 3.单行不要  import  多个库
	 4.模板内用不到的不要去  import
三  空格
 		1.:  ,   ; 后面跟一个空格,前面无空格(行尾分号后无空格)
 		2.二元操作符前后各一个空格(数学运算符,比较运算符,逻辑运算符,位运算符)
 		3.当=用于指示关键字参数或默认参数值时,不要在其两侧使用空格
四  注释
  		忌逐行添加注释或没有注释
五  命名
  		1.不要用单字符(lambda中可以)
  		2.包名,模块名,函数名,方法名全部用小写,单词间用下划线连接
  		3.类名,异常名用CapWords(首字母大写)的方式,
 六  字符串拼接尽量用join方式,速度快,内存消耗小
 七   语义明确
  		not xx in yy VS xx not in yy 
  		not a is b VS a is not b 
八   自定义的变量名,函数名不要与标准库中的名字冲突

迭代器,生成器
interator :任何实现 iter 和__next__的对象都是迭代器
iter 返回迭代器自身
next 返回容器中的下一个值
如果容器中没有更多元素,则刨除Stoplteration异常

generator:生成器是一种特殊的迭代器,不需要自定义 iter 和__next__

装饰器
最简装饰器
举例一

def deco(func):
    def wrap():
        print('hahaha')
    return wrap

@deco
def A():
    print('lalala')

A()

结果:hahaha

#先走装饰器,载运行wrap.wrap中不含有print('lalala')所以结果中不输出
#A()-->deco-->func:A-->retutn wrap:wrap()-->'hahaha'

举例二

def deco(func):
    print(func)
    print('lalala')
    def wrap():
        print('hahaha')
        return func()
    return wrap

@deco
def A():
    print('shuai')

@deco
def B():
    print('zhenshuai')
A()
B()

#首先输出lalala-->A()-->deco-->func:A-->retutn wrap:wrap()-->'hahaha'-->'shuai'
#-->B()-->deco-->func:B-->retutn wrap:wrap()-->'hahaha'-->'zhenshuai'

在这里插入图片描述

带参数的装饰器
一个参数

def deco(func):
    def wrap(n):
        print('hahaha')
        return func(n)
    return wrap

@deco
def A(name):
    print(name)

A('Rose')

#A中给name赋值
#结果:hahaha
#	  Rose

二个参数

def deco(func):
    def wrap(n,n1):
        print('登陆失败')
        n='Ok'
        return func(n,n1)  #A()
    return wrap

@deco
def A(name,name2):
    print(name)
    print(name2)

A('Rose','Jack')


#n=Ok覆盖name,输出Ok,n1赋值Jack正常输出

在这里插入图片描述

举例:
输入两个值,本函数打印数字的和,装饰器的作用求两个数字的和

def deco(func):
    def warp(num1,num2):
        sum=num1+num2
        return func(sum,num2)   #sum覆盖num1,输出和
    return warp

@deco
def A(num1,num2):
    print('和是 %d'%num1)   #输出sum的值

A(8,6)

结果:和是 14

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

import random
def deco(func):
    def warp(n1,n2):
        n1=0     #不管输什么验证码,结果都是错误
        return func(n1,n2)
    return warp

@deco
def A(n1,n2):
    if n1==n2:
        print('验证码正确')
    else:
        print('验证码错误')
   
n1 = random.randrange(1000,9999)
print('验证码是:%d'%n1)
n2 = int(input('>>'))
A(n1,n2)


结果:验证码是:6586
	 >>6586
	 验证码错误
import random
def deco2(parms):
    def deco(func):
        def warp(*args,**kwargs):
            if parms:
                kwargs['n1']=-1
            return func(*args,**kwargs)
        return warp
    return deco

       
@deco2(True)    #改为False  输出结果就与验证码的正确有关
def A(n1,n2):
    if n1==n2:
        print('验证码正确')
    else:
        print('验证码错误')
   
num = random.randrange(1000,9999)
print('验证码是:%d'%num)
num2 = int(input('>>'))
A(n1=num,n2=num2)


结果:验证码是:9952
	 >>9952
	 验证码错误

进程和线程
进程:就是操作系统中执行的一个程序,进程可以通过fork或spawn的方式来创建新的进程来执行其他的任务
线程:就是拥有多个可以获得CPU调度的执行单元
多线程举例:

from random import randint
from threading import Thread
from time import time, sleep


def download(filename):
    print('开始下载%s...' % filename)
    time_to_download = randint(5, 10)
    sleep(time_to_download)
    print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))


def main():
    start = time()
    t1 = Thread(target=download, args=('Python从入门到住院.pdf',))
    t1.start()
    t2 = Thread(target=download, args=('Peking Hot.avi',))
    t2.start()
    t1.join()
    t2.join()
    end = time()
    print('总共耗费了%.3f秒' % (end - start))


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值