python使用(三)
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使用(三)的更多相关文章
- 学习Python的三种境界
前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...
- selenium webdriver (python) 第三版
感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- 简学Python第三章__函数式编程、递归、内置函数
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- 初学Python(三)——字典
初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- python第三十一课--递归(2.遍历某个路径下面的所有内容)
需求:遍历某个路径下面的所有内容(文件和目录,多层级的) import os #自定义函数(递归函数):遍历目录层级(多级) def printDirs(path): dirs=os.listdir( ...
- Python的三种格式化输出
今天刚学了python的三种格式化输出,以前没接触过这么有趣的输出方式,现在来分享一下. #!/user/bin/env python#coding:utf-8#三种格式化输出 #第一种格式化输出na ...
- Python进阶(三十五)-Fiddler命令行和HTTP断点调试
Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...
随机推荐
- zip / unzip 的用法
zip 1.功能作用:压缩文件或者目录 2.位置:/usr/bin/zip 3.格式用法:zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [z ...
- c#文件比较Code
我想我们很多时候想比较一个文件里面是否有改动,比如一个dll库是新加了一个方法或修改了其中的方法实现,不能通过可视化的工具来比较的时候,可以用这个小工具来比较, 以下是比较文件的代码. using S ...
- 何时使用Delegate或接口
在以下情况下使用Delegates很有用: 调用一个单一方法: 一个类要进行方法规范(method specification)的多种执行: 使用一个静态方法来执行规范: 想获得类似事件设计的模式: ...
- oracle之简单总结
视图: 作用:是数据库对象,是一个或多个表的或视图中导出的虚表,视图对应的数据并不是存储在视图中,而是存储在数据库中的数据表中. 视图的结构和数据是对数据表进行查询的结果. 优点: 1.简化数据操作. ...
- (最长公共子序列 暴力) Common Subsequence (poj 1458)
http://poj.org/problem?id=1458 Description A subsequence of a given sequence is the given sequence w ...
- 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .
今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...
- hdu 5071 vector操作恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5071 对于每一个窗口,有两个属性:优先级+说过的单词数,支持8个操作:新建窗口,关闭窗口并输出信息,聊天(置顶窗 ...
- docker mac
官网上有安装方法.已安装成功. 容器千万不能随便删 现在已经不用boot2docker,使用dockertools来安装docker,dockertools中包含docker-machine,等等. ...
- Python自动化开发 - 常用模块(一)
本节内容 1.模块介绍 2.time&datetime模块 3.random模块 4.os模块 5.sys模块 6.json&pickle模块 7.logging模块 一.模块介绍 模 ...
- CentOS BIND9安装及配置
1.安装 #yum install bind 2.备份 named.conf #cp /etc/named.conf /etc/named.conf.bak 3.编辑 named.conf ( ...