01_函数嵌套与闭包

  1. 函数也是一个对象
  2. def func(a,b):
  3. return a+b
  4. abc = func 这么做abc就和func一样了
  5. num1 = func(10,20)
  6. num2 = abc(10,20)
  7. print(num1,num2)
  8. # python允许函数的内部再定义函数
  9. # 一般这种情况,内部函数都会作为返回值返回出来
  10. # 在返回一个函数的时候,也会将函数当前的变量等信息携带出来
  11. # 这种机制称之为【闭包】
  12. def outer(factor):
  13. def inner(num):
  14. return factor*num
  15. return inner
  16. test1 = outer(10)
  17. test2 = outer(100)
  18. print(test1(20)) # 这里输出200
  19. print(test2(5)) # 这里输出500

02_装饰器

  1. def w1(func):
  2. def inner():
  3. print("开始检查")
  4. # 一堆检查的代码.....
  5. print("检查完毕")
  6. re = func()
  7. print("函数调用完毕")
  8. return re
  9. return inner
  10. # 装饰器
  11. # @w1的意思就是把下面的函数传递到w1中,并返回w1的
  12. # 返回值给下面的函数对象。
  13. # 相当于修改了函数对象指向了inner
  14. # 通过这种方式,实现了不修改函数代码,就增加函数功能的目的
  15. # 符合对于修改关闭,对于扩展开放的原则。
  16. @w1 # fun1 = w1(fun1)
  17. def fun1():
  18. print("我实现了一个大功能1")
  19. @w1
  20. def fun2():
  21. print("我实现了一个大功能2")
  22. @w1
  23. def fun3():
  24. print("我实现了一个大功能3")
  25. # 面还有100个函数....
  26. fun1()
  27. fun2()

03_关于时间

  1. # 时间 是time模块中的函数
  2. # python中,有三种表示时间的方式:
  3. # 1. 时间戳
  4. # 2. 字符串
  5. # 3. 时间结构体
  6. import time
  7. # 获取时间戳
  8. time_temp = time.time()
  9. print(time_temp)
  10. # 将时间戳转为能看懂的时间字符串
  11. str_time = time.ctime(time_temp)
  12. print(str_time)
  13. # 将时间戳转为标准时间元组
  14. tup_time = time.gmtime(time_temp)
  15. print(tup_time)
  16. # 将时间戳转为本地时间元组
  17. tup_time = time.localtime(time_temp)
  18. print(tup_time)
  19. # 提取时间元组中的信息
  20. print(time.strftime("%Y-%m-%d %H:%M:%S",tup_time))

04_关于日期类

  1. # python还能够获取日期
  2. # 使用的是 datatime模块
  3. # 这个模块 基本兼容time模块 同时还有日期功能
  4. import datetime
  5. # 其中包含着 datetime.time
  6. dt1= datetime.date.today()
  7. print(dt1)
  8. # 制定一个日期,得到日期对象
  9. dt2 = datetime.date(2017,8,15)
  10. print(dt2)
  11. # 分别输出年月日
  12. print(dt1.year,dt1.month,dt1.day)
  13. # 获取星期几
  14. print(dt1.isoweekday())
  15. # 日期和时间统一使用 可以同时设置日期和时间
  16. datetime1 = datetime.datetime(2018,12,15,8,10,55)
  17. print(datetime1.date(),datetime1.time())
  18. datetime2 = datetime.datetime.now()
  19. print(datetime2.date(),datetime2.time())
  20. # 日期加1天或者减1天
  21. datetime2 = datetime.datetime.now()
  22. # 明天
  23. dt1 = datetime2 + datetime.timedelta(days=1)
  24. # 昨天
  25. dt1 = datetime2 + datetime.timedelta(days=-1)
  26. # 前天
  27. dt1 = datetime2 + datetime.timedelta(days=-2)

05_随机数

  1. import random
  2. # 生成一个0到1之间的随机小数
  3. num = random.random()
  4. print(num)
  5. # 生成一个范围内的随机整数
  6. for i in range(0,5):
  7. rand_num1 = random.randint(10,50)
  8. rand_num2 = random.randrange(10,50)
  9. print(rand_num1,rand_num2)
  10. # 生成一个随机验证码

06_生成随机验证码

  1. import random
  2. tmp = ""
  3. for i in range(6):
  4. rad1 = random.randrange(4)
  5. if rad1 ==1 or rad1 ==3:
  6. rad2 = random.randrange(0,9)
  7. tmp += str(rad2)
  8. else:
  9. rad3 = random.randrange(65,90)
  10. tmp += chr(rad3)
  11. print(tmp)

07_文件操作

  1. list1 = ["hello\n","world\n","nihao\n","15pb\n"]
  2. # 打开文件
  3. file = open(".\\123.txt","r+")
  4. # file.write("jintiantianqibucuo")
  5. #file.writelines(list1)
  6. # 可以一次性将数据全部获取到
  7. #str_file = file.read()
  8. # 可以一行一行的读取数据
  9. str_line = file.readline()
  10. while str_line!='':
  11. print(str_line)
  12. str_line = file.readline()
  13. file.close()

08_多线程

  1. import threading
  2. import time
  3. def thread_proc():
  4. n = 0
  5. thread_name = threading.current_thread().name
  6. while n<100000:
  7. n = n+1
  8. print("线程名为%s 当前的数字为%d"%(thread_name,n))
  9. time.sleep(1)
  10. # 创建一个线程
  11. t = threading.Thread(target=thread_proc,name= "15pb")
  12. # 启动这个线程
  13. t.start()
  14. n = 0
  15. thread_name = threading.current_thread().name
  16. while n < 100000:
  17. n = n + 1
  18. print("线程名为%s 当前的数字为%d" % (thread_name, n))
  19. time.sleep(0.5)
  20. # 等待线程结束
  21. t.join()
  22. print("大家结束了")

09_线程同步

  1. import threading
  2. g_Num = 0
  3. lock = threading.Lock()
  4. def threadProc():
  5. global g_Num
  6. for i in range(1000000):
  7. lock.acquire() # 锁住
  8. g_Num = g_Num+1 # 修改数据:
  9. lock.release() # 开锁
  10. thread1 = threading.Thread(name = "15PB",target=threadProc)
  11. thread2 = threading.Thread(name = "hello",target=threadProc)
  12. thread1.start()
  13. thread2.start()
  14. thread1.join()
  15. thread2.join()
  16. print(g_Num)

10_线程回调函数传递参数

  1. import threading
  2. import time
  3. def thread_proc(*arg):
  4. n = 0
  5. outer_arg = arg
  6. while n<100000:
  7. n = n+1
  8. print(outer_arg)
  9. time.sleep(1)
  10. # 创建一个线程
  11. t = threading.Thread(target=thread_proc,args=(1,2,3,4))
  12. # 启动这个线程
  13. t.start()
  14. n = 0
  15. thread_name = threading.current_thread().name
  16. while n < 100000:
  17. n = n + 1
  18. print("线程名为%s 当前的数字为%d" % (thread_name, n))
  19. time.sleep(0.5)
  20. # 等待线程结束
  21. t.join()
  22. print("大家结束了")