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 ...
随机推荐
- oracle忘记了sys,system 密码后怎么修改?
一.忘记除SYS.SYSTEM用户之外的用户的登录密码. 用SYS (或SYSTEM)用户登录: CONN SYS/PASS_WORD AS SYSDBA; 使用如下语句修改用户的密码: ALTE ...
- 学以致用一 安装centos7.2虚拟机
5说来惭愧,也是很久没来博客园了.距离上次写的已经快一年,只能说时间过的真的很快. 而如果这一年一直在坚持认真学习的话,收获肯定很多.然而我确又浪费了很多光阴,不得不恨这人生苦短. 在这一年里,小孩还 ...
- linux上搭建solr(用jetty部署)
环境搭建:centos7及solr7版本 描述:最新版本的solr内置了jetty容器,可以支持jetty部署,从而不需要发布到tomcat下面 首先同样先在/usr/local/mypackage上 ...
- JAVA-部署-摘
一.下载 J2SDK下载http://java.sun.com/j2se/1.4.2/download.html 下载版本是j2sdk-1_4_2_08 ECLIPSE下载http://www.ec ...
- git windows下载安装 (git命令)
Set up git At the heart of GitHub is an open source version control system (VCS) called Git. Git is ...
- CAAnimation-CAPropertyAnimation-CABasicAnimation-CAKeyframeAnimation
参考博客 iOS关于CoreAnimation动画知识总结 http://www.cnblogs.com/wujy/p/5203995.html iOSCoreAnimation动画系列教程(一):C ...
- 当Windows Phone遇到Windows 8
三年前,Windows Phone系统的发布表示了微软夺回移动市场的决心.一年前,Windows 8的发布,昭示着Windows Phone系统取得的成功——扁平化图标风格.动态磁贴.SkyDrive ...
- 学习stm32 让我们一起回顾一下C语言吧
ODR 是一个端口输出数据寄存器,也只用了低 16 位.该寄存器为可读写,从该寄存器读出来的数据可以用于判断当前 IO 口的输出状态.而向该寄存器写数据,则可以控制某个 IO 口的输出电平.该寄存器的 ...
- PCI总线目标接口状态机设计
module state_machine (devsel_l, trdy_l, stop_l, pci_ad_oe, dts_oe, par_oe, bk_oe, pci_ad_en, hi ...
- HTML 基础 块级元素与行内元素
块元素:单独占一行,宽度占整行,可以包含内联元素和其他块元素,通过样式display:inline,变为行内元素,不换行 内联元素:不单独占一行,宽度根据内容来决定,只能容纳文本或者其他内联元素 ,可 ...