python语法怎么读-python语法技巧
目录:
7、python break continue用法
1、三元表达式
2、用列表推导式来取代map和filter
3、函数式编程
4、fluent python 阅读笔记
5、enum库用法
6、python直接赋值和for循环执行效率比较
7、python break continue用法
1.break 意思为结束循环
2.continue 意思为结束当前循环进入下一个循环
1、三元表达式:
value= true-expr if condition else false-expr
例如:a='positive' if 3>0 else 'negative'
2、用列表推导式来取代map和filter
a=[1,2,3,4,5]
squares=list(map(lambda x:x**2,a))print(squares) #[1, 4, 9, 16, 25]
squares=[x**2 for x ina]print(squares) #[1, 4, 9, 16, 25]
data=list(map(lambda x:x**2 ,filter(lambda x:x%2==0,a)))print(data) #[4, 16]
data_one=[x**2 for x in a if x%2==0] 等价于data_one=[x**2 for x in a and x%2==0]
print(data_one) #[4, 16]#字典与集合也有类似的推导机制 chile_ranks={'ghost':1,'habanero':2,'cayenne':3} rank_dict={rank:name for name,rank inchile_ranks.items()} chile_len_set={len(name) for name inrank_dict.values()}print(rank_dict) #{1: 'ghost', 2: 'habanero', 3: 'cayenne'} print(chile_len_set) #{8, 5, 7}
3、函数式编程
能接收其他函数作为参数的函数,被称为高阶函数(high-order function)
代表性高阶函数:map() filter() 和 reduce()
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,
并把结果作为新的Iterable返回。
lambda_sum=lambda x,y:x+yprint(lambda_sum(3,4)) #7
data_list=[1,3,5,6]
result=map(lambda x:x+3,data_list)print(list(result)) #[4, 6, 8, 9]
deff(x):return x+3result_one=list(map(f,data_list))print(result_one) #[4, 6, 8, 9]
reduce():把一个函数作用在一个序列[x1,x2,x3,...]上,这个函数必须接收两个参数,reduce把结果
继续和序列的下一个元素做累积计算。感觉用处不大!自己也能写,会麻烦一些,如果需要,还是可用。
from functools importreduce
data_list=[1,3,5]print(reduce(lambda x,y:2*x+y,data_list)) #15
deff_reduce(x,y):return 2*x+yprint(reduce(f_reduce,data_list)) #15
new_list=data_list[:1]for i in range(1,len(data_list)):
new_list.append(2*new_list[i-1]+data_list[i])print(new_list) #[1, 5, 15]
print(new_list[-1]) #15
defprod(L):
new_list=L[:1]for i in range(1,len(L)):
new_list.append(new_list[i-1]*L[i])return new_list[-1]print(prod([3, 5, 7, 9])) #945
defprod(L):return reduce(lambda x,y:x*y,L)print(prod([3, 5, 7, 9])) #945
3、filter() ,和map()类似,也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,
然后根据返回值是True还是False决定保留还是丢弃该元素
list(filter(lambda x:x%2==0,[3,4,5])) #[4]
list(filter(lambda x:x%2==1,[3,4,5])) #[3,5]
lst=[x**2 for x in range(10)] #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
x1=[1,3,5]
y1=[9,12,13]
lst1=[x**2 for (x,y) in zip(x1,y1) if y>10]print(lst1) #[9, 25]
dict={k:v for k,v in enumerate('vamei') if v not in 'vi'}print(dict) #{1: 'a', 2: 'm', 3: 'e'}
4、fluent python 阅读笔记
importos,time,sys,requests
POP20_CC=('CN IN US ID BR PK NG BD RU JP '
'MX PH VN ET EG DE IR TR CD FR').split()
BASE_URL='http://flupy.org/data/flags'DEST_DIR='E://'
defsave_flag(img,filename):
path=os.path.join(DEST_DIR,filename)
with open(path,'wb') as fp:
fp.write(img)
defget_flag(cc):
url='{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
resp=requests.get(url)
returnresp.content
defshow(text):
print(text,end=' ')
sys.stdout.flush()
defdownload_many(cc_list):
for cc insorted(cc_list):
image=get_flag(cc)
show(cc)
save_flag(image,cc.lower()+'.gif')
returnlen(cc_list)
defmain(download_many):
t0=time.time()
count=download_many(POP20_CC)
elapsed=time.time()-t0
msg=' {} flags downloaded in {:.2f}'
print(msg.format(count,elapsed))
if __name__=='__main__':
main(download_many)
简单的一个代码,写的比较好!将一个脚本任务按照实现流程分为几个动作,每个动作写一个函数,有如下优点:
1、代码清晰
思路清晰,而非胡子眉毛一把抓,整体任务分为若干个小动作,一个动作用一个函数来实现。
2、易于扩展
如果代码某一块需要修改,可以仅修改部分函数即可,对其他函数无影响,也可以增加其他功能。
3、写主函数
代码中包含有主函数,从主函数开始,便于程序的阅读,一看到main(),知道从这里开始阅读起。
4、不同函数之间变量名称
写函数的时候可以以变量名称、类型方式写,注意函数内变量一致即可,调用时则使用全局变量中名称,两者要不一样吗?为什么呢??
比如这样改写download_many函数:
def download_many(POP20_CC):
for cc in sorted(POP20_CC):
image=get_flag(cc)
show(cc)
save_flag(image,cc.lower()+'.gif')
return len(POP20_CC)
如果我们修改主函数,下载10个国家国旗图片
POP10_CC=('CN IN US ID BR PK NG BD RU JP').split()
def main(download_many):
t0=time.time()
count=download_many(POP10_CC)
elapsed=time.time()-t0
msg=' {} flags downloaded in {:.2f}'
print(msg.format(count,elapsed))
结果是主函数的修改对download_many函数还是起作用,因为download_many函数中变量只是相当于x,真正起作用还是调用时主函数中输入的参数值,所以你这样写也没有问题。不过用变量cc_list好,阅读起来不会引起混淆,不管你是下10国国旗还是20国国旗。如果你download_many中是20国国旗作为变量,调用时输入10国国旗为参数,看起来比较别扭。
自己以后写代码要学习这种写法!
5、python中实现switch语法结构
https://www.zhihu.com/question/21123544
defcase1(somearg):pass
defcase2(somearg):pass
defcase3(somearg):passswitch={1: case1,2: case2,3: case3
}
switch[case](arg)
5、enum库用法
from enum importEnum
EventType=Enum('EventType','tick bar signal')
EventType.tick
Out[29]: dir(EventType)
Out[30]: ['__class__', '__doc__', '__members__', '__module__', 'bar', 'signal', 'tick']
dic ={'a': 1, 'b': 2, 'c': 3}for n,buf inenumerate(dic):print(n,buf)#0 a#1 b#2 c
6、python直接赋值和for循环执行效率比较
结论:直接赋值比for循环要快
# 下面代码为 将一个对象所有属性 给 另一个对象,注意test1不行。
from datetime importdatetimeclassA():
name= "runoob"
deftest(a, b):for k, v in a.__dict__.items():
setattr(b, k, v)deftest1(a, b):for k, v in a.__dict__.items():
b.k=vdeftest2(a, b):
b.a=a.a
b.b=a.b
b.c=a.c
b.d=a.d
b.e=a.e
b.f=a.fdefrun(f, a, b):
start=datetime.now()for i in range(10000): #0000000
f(a, b)
end=datetime.now()print(end -start)
dic= {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'aa': 1, 'ba': 2, 'ca': 3, 'da': 4, 'ea': 5, 'fa': 6}
a=A()for k, v indic.items():
setattr(a, k, v)print(a.__dict__)
b=A()
run(test, a, b)print(b.__dict__)#test#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}#0:00:09.460686#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
#test1#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}#0:00:05.086406#{'k': 6}
#test2#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}#0:00:03.672156#{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
# 下面代码为 将一个字典所有键值对 作为 一个对象的属性
print('ok')from datetime importdatetimeclassA():
name= "runoob"
deftest(a, b):for k, v ina.items():
setattr(b, k, v)deftest1(a,b):for k,v ina.items():
b.__setattr__(k,v)deftest2(a, b):
b.a= a['a']
b.b= a['b']
b.c= a['c']
b.d= a['d']
b.e= a['e']
b.f= a['f']
b.aa= a['aa']
b.ba= a['ba']
b.ca= a['ca']
b.da= a['da']
b.ea= a['ea']
b.fa= a['fa']defrun(f, a, b):
start=datetime.now()for i in range(10000): #0000000
f(a, b)
end=datetime.now()print(end -start)
a= {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'aa': 1, 'ba': 2, 'ca': 3, 'da': 4, 'ea': 5, 'fa': 6}
b=A()
run(test1, a, b)print(b.__dict__)#结果:赋值比for循环快
python语法怎么读-python语法技巧相关推荐
- python这个怎么读-python怎么发音
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 注意: 您目前查阅的是历史版本 sdk 文档,已不再更新和维护,我们建议 ...
- python这个怎么读-python怎么读(python怎么读中文)
Python具有简单,易学,免费,开源,可扩展,可嵌入,面向对象等优点.其面向对象的功能甚至比java和c#.net更为完善,并且可以与C++完美集成.两者可以称为"黄金油".我相 ...
- python英文怎么读-python英文怎么读
python的读音及注解如下:python英 [?pa?θ?n]美 [?pa?θɑ?n]n.蟒; 蟒蛇;[例句]On my system, it's at/ usr/ bin/ python.[其他] ...
- python语法怎么读-python怎么读sql数据?
python中读取SQL数据的方法: python中可以使用游标cursor来读取SQL中的数据,游标cursor是由连接创建的对象,可以在游标中执行查询,并设置数据返回的格式. 当执行select语 ...
- python中文怎么读-python的读法
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 程序员,在其他人眼中往往都是高冷的存在,在他们的眼中能用代码解决的问题绝 ...
- python教程怎么读,python是什么意思?怎么读?-Python教程
python是甚么意义?怎样读? Python是一种较量争论机顺序设计言语.是一种面向工具的静态类型言语,最后被设计用于编写主动化剧本(shell),跟着版本的一直更新以及言语新性能的增加,愈来愈多被 ...
- python单词怎么读-python单词如何读
python的读音及注解如下: python英 [?pa?θ?n]美 [?pa?θɑ?n] n.蟒; 蟒蛇; [例句]On my system, it's at/ usr/ bin/ python. ...
- 计算机语言python怎么读,python编程怎么读音发音
python 怎么读 python,英[ˈpaɪθən],美[ˈpaɪθɑːn],英['paɪθən]:发音有点像"派森" 或 "派粉",注意中间那个 θ 音, ...
- python语法书籍推荐_python语法的书
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 四大基本语法分别从变量命名规则.缩进原则.特殊关键字和特殊运算符四个方面,总结 ...
最新文章
- Oracle数据库中的优化方案
- 「THUPC2018」赛艇 / Citing
- 【翻译】安卓新播放器EXOplayer介绍
- 访问Access数据库需要注意的问题
- linux查看log软件
- oracle下tmp后缀文件怎么打开,什么是TMP文件,怎么打开?(图文)
- 如何解决”ArcGIS Server Site is currently being configured by another administrative operation“的问题
- 如何进行多云环境中的数据管理?
- Dell 笔记本触摸板网页双指滑动黑屏
- sketchup如何给模型配置地理坐标
- PhantomReference虚引用
- 完美国际服务器维护中,《完美国际2》3月31日全服更新维护公告
- 微信小程序开发-模仿“优优老师”课程日历
- 打字游戏之输入框功能的实现
- ArcScene制作三维地图-三维模型
- 主属性,范式,超码,码,非主属性,全码
- 抹掉iPhone会有怎样后果 他人还能用吗
- PowerBI中的函数日期表
- 2015-07-20-struts-struts2简介
- Android调试必用工具adb命令详解