目录:

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语法技巧相关推荐

  1. python这个怎么读-python怎么发音

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 注意: 您目前查阅的是历史版本 sdk 文档,已不再更新和维护,我们建议 ...

  2. python这个怎么读-python怎么读(python怎么读中文)

    Python具有简单,易学,免费,开源,可扩展,可嵌入,面向对象等优点.其面向对象的功能甚至比java和c#.net更为完善,并且可以与C++完美集成.两者可以称为"黄金油".我相 ...

  3. python英文怎么读-python英文怎么读

    python的读音及注解如下:python英 [?pa?θ?n]美 [?pa?θɑ?n]n.蟒; 蟒蛇;[例句]On my system, it's at/ usr/ bin/ python.[其他] ...

  4. python语法怎么读-python怎么读sql数据?

    python中读取SQL数据的方法: python中可以使用游标cursor来读取SQL中的数据,游标cursor是由连接创建的对象,可以在游标中执行查询,并设置数据返回的格式. 当执行select语 ...

  5. python中文怎么读-python的读法

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 程序员,在其他人眼中往往都是高冷的存在,在他们的眼中能用代码解决的问题绝 ...

  6. python教程怎么读,python是什么意思?怎么读?-Python教程

    python是甚么意义?怎样读? Python是一种较量争论机顺序设计言语.是一种面向工具的静态类型言语,最后被设计用于编写主动化剧本(shell),跟着版本的一直更新以及言语新性能的增加,愈来愈多被 ...

  7. python单词怎么读-python单词如何读

    python的读音及注解如下: python英 [?pa?θ?n]美 [?pa?θɑ?n] n.蟒; 蟒蛇; [例句]On my system, it's at/ usr/ bin/ python. ...

  8. 计算机语言python怎么读,python编程怎么读音发音

    python 怎么读 python,英[ˈpaɪθən],美[ˈpaɪθɑːn],英['paɪθən]:发音有点像"派森" 或 "派粉",注意中间那个 θ 音, ...

  9. python语法书籍推荐_python语法的书

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 四大基本语法分别从变量命名规则.缩进原则.特殊关键字和特殊运算符四个方面,总结 ...

最新文章

  1. Oracle数据库中的优化方案
  2. 「THUPC2018」赛艇 / Citing
  3. 【翻译】安卓新播放器EXOplayer介绍
  4. 访问Access数据库需要注意的问题
  5. linux查看log软件
  6. oracle下tmp后缀文件怎么打开,什么是TMP文件,怎么打开?(图文)
  7. 如何解决”ArcGIS Server Site is currently being configured by another administrative operation“的问题
  8. 如何进行多云环境中的数据管理?
  9. Dell 笔记本触摸板网页双指滑动黑屏
  10. sketchup如何给模型配置地理坐标
  11. PhantomReference虚引用
  12. 完美国际服务器维护中,《完美国际2》3月31日全服更新维护公告
  13. 微信小程序开发-模仿“优优老师”课程日历
  14. 打字游戏之输入框功能的实现
  15. ArcScene制作三维地图-三维模型
  16. 主属性,范式,超码,码,非主属性,全码
  17. 抹掉iPhone会有怎样后果 他人还能用吗
  18. PowerBI中的函数日期表
  19. 2015-07-20-struts-struts2简介
  20. Android调试必用工具adb命令详解

热门文章

  1. Redis: Redis Desk Manager Setup
  2. JavaScript四(DOM编程)
  3. golang之包和锁的机制
  4. 2017-11-3—grow up
  5. THinkPHP 5.0 域名路由
  6. 一次zabbix的渗透
  7. C#中关于静态与非静态的一个疑问
  8. (转)LINQ to Entities 多条件动态查询
  9. $each $position $sort $slice
  10. PHP自动加载__autoload的工作机制