1.function_option.py
2.function_code_option.py
3.thread_option.py
4.class_option.py
5.threading_option.py
6.producer_conusmer_option.py

1.function_option.py

 # coding=utf8
 __author__ = 'SummerChill'

 #一般函数
 def my_abs(x):
     """this is a abs method"""
     if isinstance(x,int):
         if x>=0:
             return x
         else:
             return -x
 #函数调用
 print(my_abs('ss'))#None

 #空函数 类似于占位符的概念,这个函数没有写完,别人也可以调用而且调用不报错.
 def nop():
     pass

 nop()

 ####python函数可以没有返回值,如果没有则默认为None

 #多值函数
 #函数可以有多个值 多个值以元组的方式来展示的,获取后不允许修改返回值。
 def multi(x,y):
     return x,x+y

 data=multi(1,2)
 print(data)#(1, 3)

 def add(x,y,f):
     return f(x)+f(y)
 #函数可以作为变量 传入时只传入函数名称[去掉自动添加的()]

 #lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数

 #默认的参数 注意:非默认参数不能在默认参数的后面
 #用户传入则以用户的为准,否则取默认值
 def defalut(x,y=1,z=2):
     return x+y+z

 #可变的参数 可变参数的接受端 是以tuple方式接受的
 #常规的参数不能在可变的参数的后面
 def change(x,*y):
     total=0
     for i in y:
         total=total+i
     return x,total
 print(change(1,1,2,3,4,5))#(1, 15)

 ###########调用函数时
 #对号入座
 print(multi(1,2))#(1, 3)
 print(multi(2,1))#(2, 3)
 #直接指定参数 养成好的习惯
 print(multi(y=2,x=1))#(1, 3)

2.function_code_option.py

 # coding=utf8
 __author__ = 'SummerChill'

 #lamda
 add=lambda x,y:x+y

 #apply 使用参数来触发方法并且获取返回值。一般了解就可以
 #第一个方法的名称
 #方法中的一般的参数
 #方法中的可变参数
 def addnew(x,y,**z):
     print(z,x,y)

 def addold(x,y):
     print(x,y)
 apply(addnew,[1,2],{'a':1,'b':2})#({'a': 1, 'b': 2}, 1, 2)
 apply(addold,[1,2])#(1, 2)

 #filter 过滤函数[返回布尔类型]和要过滤的seq集合
 #sequence:list,tuple,set,string,dic
 #返回值:list string tuple
 def filterfun(x):
     if int(x)%2==0:
         return True
     else:
         return False

 print(filter(filterfun,[1,2,3,4,5,6,7,8,9]))#[2, 4, 6, 8]
 print(filter(filterfun,(1,2,3,4,5,6,7,8,9)))#(2, 4, 6, 8)
 print(filter(filterfun,set([1,2,3,4,5,6,7,8,9])))#[2, 4, 6, 8]

 ':'A',2:'B',3:'C'}))#[2]

 #map 将传入的seq 进过一个mapfun函数计算得到一个新的list
 #返回值都有list
 def map_fun(x):
     return 2*int(x)

 print(map(map_fun,[1,2,3,4,5,6,7,8,9]))#[2, 4, 6, 8, 10, 12, 14, 16, 18]
 print(map(map_fun,(1,2,3,4,5,6,7,8,9)))#[2, 4, 6, 8, 10, 12, 14, 16, 18]
 print(map(map_fun,set([1,2,3,4,5,6,7,8,9])))#[2, 4, 6, 8, 10, 12, 14, 16, 18]
 '))#[2, 4, 6, 8, 10, 12, 14, 16, 18]
 ':'A',2:'B',3:'C'}))#[2, 4, 6]

 #两个参数还是map 是两个序列的聚合
 #不改变单个序列的元素个数
 #在map函数为多个参数中,两个序列分别传给对应的参数,
 # 如果有一方个数不足,则默认为None
 def map_fun_new(x,y):
     if x is None:
         x=0
     if y is None:
         y=0
     return int(x)+int(y)
 print(map(map_fun_new,(1,2,3,4),[1,2]))#[2, 4, 3, 4]

 #reduce
 def reuduce_fun(x,y):
     return x,y

 #先将序列中的前两个带入计算,然后将计算结果a和第三个元素带入计算,一次迭代
 #如果指定了initial则首先从此值和第一个元素开始计算。
 print(reduce(reuduce_fun,[1,2,3,4,5,6,7,8,9]))#((((((((1, 2), 3), 4), 5), 6), 7), 8), 9)  最终是一个大的tuple
 print(reduce(reuduce_fun,[1,2,3,4,5,6,7,8,9],10))#(((((((((10, 1), 2), 3), 4), 5), 6), 7), 8), 9)

 ##################异常的处理
 try:
     print 'try...'
     r = 10 / 0
     print 'result:', r
 except Exception as e:
     print 'except:', e #except: integer division or modulo by zero
     #raise #一旦执行了raise语句,raise后面的语句将不能执行(和Java中throw一样)  #ZeroDivisionError: integer division or modulo by zero
     #print("end raise")
 finally:
     print 'finally...'
 print 'END'

3.thread_option.py

 # coding=utf8
 __author__ = 'SummerChill'

 import thread,time
 #主线程退出则此线程会终止
 lt=thread.allocate_lock()
 def sayHi():
     print(time.ctime()+"------"+str(thread.get_ident()),"hi")
     print(time.ctime()+"------"+str(thread.get_ident()),"is locked:"+str(lt.locked()))
     print(time.ctime()+"------"+str(thread.get_ident()),"begin get lock")
     #尝试着去获取锁 参数为watiFlag True表示如果此锁被其他人占用则等待
     #如果为False则不等待,如果有其他线程占用 获取失败
     lt.acquire(True)
     time.sleep(5)
     print(time.ctime()+"------"+str(thread.get_ident()),"end get lock")
     print(time.ctime()+"------"+str(thread.get_ident()),"begin release lock")
     #释放锁
     lt.release()
     print(time.ctime()+"------"+str(thread.get_ident()),"end release lock")
     # thread.interrupt_main()
 thread.start_new_thread(sayHi,())
 time.sleep(2)
 thread.start_new_thread(sayHi,())

 #10s后main线程自动关闭
 try:
     time.sleep(10)
 except KeyboardInterrupt:
     print('我被打断了')
 finally:
     print('done')
 """
 ('Thu Sep 22 08:48:57 2016------11432', 'hi')
 ('Thu Sep 22 08:48:57 2016------11432', 'is locked:False')
 ('Thu Sep 22 08:48:57 2016------11432', 'begin get lock')
 ('Thu Sep 22 08:48:59 2016------10712', 'hi')
 ('Thu Sep 22 08:48:59 2016------10712', 'is locked:True')
 ('Thu Sep 22 08:48:59 2016------10712', 'begin get lock')
 ('Thu Sep 22 08:49:02 2016------11432', 'end get lock')
 ('Thu Sep 22 08:49:02 2016------11432', 'begin release lock')
 ('Thu Sep 22 08:49:02 2016------11432', 'end release lock')
 ('Thu Sep 22 08:49:07 2016------10712', 'end get lock')
 ('Thu Sep 22 08:49:07 2016------10712', 'begin release lock')
 ('Thu Sep 22 08:49:07 2016------10712', 'end release lock')
 done
 """

4.class_option.py

 # coding=utf8
 __author__ = 'SummerChill'

 """
 定义的关键字:class。
     一个类里的初始化方法__init__(self,?),第一个参数必须是self。
     这是构造方法。内部的方法第一个参数也要是self,self相当于java对象里的this。

 注:
 一个类里只识别一个__init__(self,?)方法。
 如果有多个则后者覆盖前者。
 即:如果一个类中有名字重复的函数。
 不论参数个数是否一致只识别最后一个。。
 """
 class Person:
     name=''
     def __init__(self):
         pass
     def __init__(self,_name):
         print('ss')

     def say(self):
         print("Person%s"%(self.name))
     def say(self,id):
         print("Person%s %s "%(self.name,id))
 p=Person('zenith')
 p.say(1)
 #python 里没有方法重载问题 后者覆盖前者

 class Man(Person):
     id=''
     def __init__(self,_id,_name):
         self.id=_id
         self.name=_name
     def say(self):
         print("Man %s %s "%(self.name,self.id))

 m=Man(1,'man')
 m.say()
 #如果一个成员变量或者方法,父类有子类也有则子类覆盖父类的成员变量或者方法。

5.threading_option.py

 # coding=utf8
 __author__ = 'SummerChill'
 import threading,time

 class Worker(threading.Thread):
     def __init__(self):
         # 如果自定义了构造函数则要将threading.Thread初始化。
         #AssertionError: Thread.__init__() not called
         threading.Thread.__init__(self)

     def run(self):
         print(self.getName())
         print('begin hi')
         time.sleep(5)
         print('end hi')
         print(self.isAlive())
         #是否为守护线程
         print(self.isDaemon())

 print('main begin')
 th=Worker()
 th.setName('th_hi')
 #守护线程:如果用户线程都死亡了,此线程亦会终止,和main主进程没有任何关系.
 th.setDaemon(False)
 th.start()
 #join 不加参数会等当前线程在等待join的线程结束后再继续,timeout 参数最多等n秒
 th.join()
 print('main end')

6.producer_conusmer_option.py

 # coding=utf8
 __author__ = 'SummerChill'

 import threading,Queue,time,random

 #练习:一个线程每0.5s随机生产一个0-10的数字,另一线程5s统计一次结果。
 #生产者
 class DataProducer(threading.Thread):
     q=None
     def __init__(self,_queue):
         threading.Thread.__init__(self)
         self.q=_queue
     def run(self):
         while True:
             time.sleep(0.5)
             self.q.put(random.randint(0,10),True)

 #消费者
 class DataConsumer(threading.Thread):
     q=None
     def __init__(self,_queue):
         threading.Thread.__init__(self)
         self.q=_queue
     def run(self):
         while True:
             time.sleep(5)
             sum=0
             while not self.q.empty():
                 #不会空肯定能够get到数据 不用阻塞也不会报empty错
                 sum=sum+self.q.get(False)
             print("sum:"+str(sum))

 que=Queue.Queue()
 dp=DataProducer(que)
 dp.start()

 dc=DataConsumer(que)
 dc.start()

python使用(三)的更多相关文章

  1. 学习Python的三种境界

    前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...

  2. selenium webdriver (python) 第三版

    感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...

  3. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典

    Python第三天 序列  数据类型  数值  字符串  列表  元组  字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...

  4. 简学Python第三章__函数式编程、递归、内置函数

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  5. 初学Python(三)——字典

    初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...

  6. Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell ...

  7. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  8. python第三十一课--递归(2.遍历某个路径下面的所有内容)

    需求:遍历某个路径下面的所有内容(文件和目录,多层级的) import os #自定义函数(递归函数):遍历目录层级(多级) def printDirs(path): dirs=os.listdir( ...

  9. Python的三种格式化输出

    今天刚学了python的三种格式化输出,以前没接触过这么有趣的输出方式,现在来分享一下. #!/user/bin/env python#coding:utf-8#三种格式化输出 #第一种格式化输出na ...

  10. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

随机推荐

  1. iptables说明(转)

    原文:https://www.linuxidc.com/Linux/2016-09/134832.htm 前提基础: 当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户 ...

  2. C++ cout

    cout.flush() cout.put() 输出一个字符 char* p = "hello"; cout.write(p,sttrlen(q)-3) 输出字符串,能够选定长度. ...

  3. vs2013查看代码性能后删除保存的性能查看文件导致再打开提示未找到与约束匹配的导出

    1.关闭VS: 2.删除C:/Users//AppData/Local/Microsoft/VisualStudio/12.0/ComponentModelCache文件夹下所有文件及文件夹: 3.重 ...

  4. 好文推荐系列-------(5)js模块化编程

    本文主要来源于阮一峰的<Javascript模块化编程>系列文章整合,原文地址:http://www.ruanyifeng.com/blog/2012/10/javascript_modu ...

  5. 深入浅出javascript(十二)继承——构造函数继承和组合继承

    #题记: 有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号).现有两个子类,分别为苹果,桔子,希望继承水果父类. 一.构造函数继承 构造函数继承相当把父类的属性在子类 ...

  6. Lua 常用遍历

    b = {} , do b[i] = i end -- method one for i, v in pairs(b) do print (i, v) end -- method two for i, ...

  7. (转)什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

    转自:http://www.cnblogs.com/haofaner/articles/2288968.html 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服务 ...

  8. 第一章javascript词法结构笔记摘要

    语法介绍 javascript最流行的脚本语言,用于web和HTML,服务器.pc.移动端 轻量级语言,可以插入HTML页面,由浏览器按编写顺序执行 一.字符集 用Unicode字符集编写,是ASCI ...

  9. NLP生成论文

    论文框架 内容 注:既要有引用,又不能完全引用,是在前人基础上更进一步.

  10. day19(乱码解决方案)

    乱码的解决方案: 首先需要理解乱码的产生原因:无非就是编码格式的问题 1.服务器到浏览器 字节流传输时 产生乱码的原因: 1.浏览器打开方式不对(打开时 的方式为默认的方式,各个浏览器的方式都不同) ...