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. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...

  2. python3 print函数的用法

    1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 ...

  3. s4-6 二层交换

    为什么需要二层交换?  有很多LAN,如何将它们连接起来? 可用网桥(bridges )将它们连接起来.  网桥工作在DLL层,通过检查MAC地址做出转发帧的决策 不会检查网络层,所以,IPv ...

  4. 链家web前端面试

    共有三轮面试,每个面试官的第一个问题都是:介绍一个你觉着比较出彩的项目 第一轮面试: 因为公司项目没什么亮点,很传统的pc端,美女面试官就说让讲一下我用react的私人项目; 问了很多都是关于reac ...

  5. wget批量下载http文件

    eg:http://hgdownload.soe.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeAwgDnaseUniform/ 下载该路径下的所有文件 wge ...

  6. 开源C++版本CGI库CGICC入门

    原发布在ChinaUnix,但未自动搬迁过来:http://blog.chinaunix.net/uid-20682147-id-4895772.html PDF版本:https://files-cd ...

  7. Java EE JAR包的说明

    在java ee的开发中,jar文件是工程的基础,下面转载了网上兄弟一篇文章,简单介绍了一下,java ee中常用的jar文件的说明: activation.jar 与javaMail有关的jar包, ...

  8. linux 添加本地yum源

    1.查看自己是否安装了 yum rpm -qa|grep yum 查看yum配置文件 2.创建一个文件夹 用于挂载光盘 这里创建到/media下 取名叫cdrom mkdir /media/cdrom ...

  9. (记忆化搜索)Jury Compromise (poj 1015)

    http://acm.fzu.edu.cn/problem.php?pid=1005 Description The fastfood chain McBurger owns several rest ...

  10. [ 9.13 ]CF每日一题系列—— 340A GCD & LCM

    Description: [ 着实比较羞愧,都想着去暴力,把算法(方法)也忘了] A只涂x,2x,3x……,B只涂y,2y,3y……问你A和B共同涂的墙的个数 Solution: 就是求x和y的lcm ...