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 ...
随机推荐
- mysql学习之路_基础知识
Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数 ...
- java高精度实数和小数
java 高精度实数和小数 String s = "1231222222222222222222222222222222222222222222222222222222"; Big ...
- Java四种排序:冒泡,选择,插入,二分(折半插入)
四种排序:冒泡,选择,插入,二分(折半插入) public class Test{ // public static void main(String[] args) { // Test t=new ...
- DML DDL
DDL 1.SQL分为5大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据操纵语言 DTL:数据事务语言 DQL:数据查询语言 2.DDL(data definition languag ...
- Shell编程-12-Shell脚本规范及调试
目录 Shell脚本规范 Shell脚本调试 Shell脚本规范 良好的代码规范不仅方便阅读,也利于维护和提升开发效率.因此建议大家在编写Shell脚本时养成良好的代码习惯.今天就和大家探讨一 ...
- hdu 4135 [a,b]中n互质数个数+容斥
http://acm.hdu.edu.cn/showproblem.php?pid=4135 给定一个数n,求某个区间[a,b]内有多少数与这个数互质. 对于一个给定的区间,我们如果能够求出这个区间内 ...
- NTP 服务器搭建
FROM:http://blog.sina.com.cn/s/blog_511b46d10100agzf.html 配置环境: 1. 假设在 192.168.0.0 网段内,要以IP为 10.233. ...
- CentOS ntp同步
新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间. 如下是CentOS系统使用NTP来从一个时间服务器同步 把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/sha ...
- RNN以及LSTM的介绍和公式梳理
前言 好久没用正儿八经地写博客了,csdn居然也有了markdown的编辑器了,最近花了不少时间看RNN以及LSTM的论文,在组内『夜校』分享过了,再在这里总结一下发出来吧,按照我讲解的思路,理解RN ...
- Python基础语法-内置数据结构之列表
列表的一些特点: 列表是最常用的线性数据结构 list是一系列元素的有序组合 list是可变的 列表的操作, 增:append.extend.insert 删:clear.pop.remove 改:r ...