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. Oracle 导出错误 EXP-00000~EXP-00107

    EXP-00000: Export terminated unsuccessfully Cause: Export encountered an Oracle error. Action: Look ...

  2. javaweb项目中的文件上传下载功能的实现

    框架是基于spring+myBatis的. 前台页面的部分代码: <form action="${ctx}/file/upLoadFile.do"method="p ...

  3. Python 安装requests和MySQLdb

    Python 安装requests和MySQLdb 2017年10月02日 0.系统版本 0.1 查看系统版本 [root@localhost ~]# uname -a Linux localhost ...

  4. CMake和静态库顺序

    目录 目录 1 前言 1 方法 1 附1:链接静态库的顺序问题 2 附2:再议GCC编译时的静态库依赖次顺问题 3 附3:gcc链接参数--whole-archive的作用 4 附4:让有些“-l”链 ...

  5. 20145232 韩文浩 《Java程序设计》第3周学习总结

    教材学习内容总结 在第三章中,知道了Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型.在这一周主要学习了类类型. 对象(Object):存在的具体实体,具有明确的状态和行为 类( ...

  6. 有趣的HTML5 CSS3效果

    iphone6 外观:http://www.html5tricks.com/demo/css3-iphone6/index.html 天气图标:http://www.html5tricks.com/d ...

  7. JS鼠标滚动插件scrollpath使用介绍

    JS鼠标滚动插件scrollpath:在这个插件中首先要引人的JS是jQuery,因为后面的JS都是基于它的.再者需要引入的是jquery.scrollpath.js.scrollpath.css还有 ...

  8. ubuntu下mysql远程连接

    第一步: vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0.0.1               ...

  9. bash获得脚本当前路径

    #!/bin/bashCMD_PATH=`dirname $0`echo "current cmd path:$CMD_PATH"cd $CMD_PATHecho $PWDecho ...

  10. Alpha冲刺 - (3/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 ssm框架的使用并实现简单的数据处理 ...