Python 语法的精妙之处就体现在下面10个例子中。

1、for - else

>>> for i in [1,2,3,4]:print(i)
else:print(i, '我是else')1
2
3
4
4 我是else

else 的眼里只有 for,只要 for 顺利执行完毕,else 就会屁颠儿屁颠儿地跑一遍:

>>> for i in [1,2,3,4]:if i > 2:print(i)
else:print(i, '我是else')3
4
4 我是else

只有当 for 循环被 break 语句中断之后,才会跳过 else 语句:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> for i in [1,2,3,4]:if i>2:print(i)break
else:print(i, '我是else')3

2.一颗星*和两颗星**

>>> def multi_sum(*args):s = 0for item in args:s += itemreturn s>>> multi_sum(3,4,5)
12

Python 函数允许同时全部或部分使用固定参数、默认参数、单值(一颗星)可变参数、键值对(两颗星)可变参数,使用时必须按照前述顺序书写。

>>> def do_something(name, age, gender='男', *args, **kwds):print('姓名:%s,年龄:%d,性别:%s'%(name, age, gender))print(args)print(kwds)>>> do_something('xufive', 50, '男', 175, 75, math=99, english=90)
姓名:xufive,年龄:50,性别:男
(175, 75)
{'math': 99, 'english': 90}

3.三元表达式

>>> y = 5
>>> if y < 0:print('y是一个负数')
else:print('y是一个非负数')y是一个非负数

其实,python 是支持三元表达式的,只是稍微怪异了一点,类似于我们山东人讲话。比如,山东人最喜欢用倒装句:打球去吧,要是不下雨的话;下雨,咱就去自习室。翻译成三元表达式就是:
打球去吧 if 不下雨 else 去自习室
来看看三元表达式具体的使用:

>>> y = 5
>>> print('y是一个负数' if y < 0 else 'y是一个非负数')
y是一个非负数
python 的三元表达式也可以用来赋值:
>>> y = 5
>>> x = -1 if y < 0 else 1
>>> x
1

4.with - as

with 语句适合一些事先需要准备,事后需要处理的任务,比如,文件操作,需要先打开文件,操作完成后需要关闭文件。如果不使用with,文件操作通常得这样:

fp = open(r"D:\phyger\Column\temp\mpmap.py", 'r')
try:contents = fp.readlines()
finally:fp.close()

如果使用 with - as,那就优雅多了:

>>> with open(r"D:\phyger\Column\temp\mpmap.py", 'r') as fp:contents = fp.readlines()

5.列表推导式

求列表各元素的平方,通常应该这样写(当然也有其他写法,比如使用map函数):

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> a = [1, 2, 3, 4, 5]
>>> result = list()
>>> for i in a:result.append(i*i)>>> result
[1, 4, 9, 16, 25]

如果使用列表推导式,看起来就舒服多了:

>>> a = [1, 2, 3, 4, 5]
>>> result = [i*i for i in a]
>>> result
[1, 4, 9, 16, 25]

事实上,推导式不仅支持列表,也支持字典、集合、元组等对象。

6.列表索引的各种骚操作

>>> a = [0, 1, 2, 3, 4, 5]
>>> a[2:4]
[2, 3]
>>> a[3:]
[3, 4, 5]
>>> a[1:]
[1, 2, 3, 4, 5]
>>> a[:]
[0, 1, 2, 3, 4, 5]
>>> a[::2]
[0, 2, 4]
>>> a[1::2]
[1, 3, 5]
>>> a[-1]
5
>>> a[-2]
4
>>> a[1:-1]
[1, 2, 3, 4]
>>> a[::-1]
[5, 4, 3, 2, 1, 0]

如果说,这些你都很熟悉,也经常用,那么接下来这个用法,你一定会感觉很神奇:

>>> a = [0, 1, 2, 3, 4, 5]
>>> b = ['a', 'b']
>>> a[2:2] = b
>>> a
[0, 1, 'a', 'b', 2, 3, 4, 5]
>>> a[3:6] = b
>>> a
[0, 1, 'a', 'a', 'b', 4, 5]

7.lambda函数

下面是一个求和的匿名函数,输入参数有两个,x和y,函数体就是x+y,省略了return关键字。

>>> lambda x,y: x+y
<function <lambda> at 0x000001B2DE5BD598>
>>> (lambda x,y: x+y)(3,4) # 因为匿名函数没有名字,使用的时候要用括号把它包起来

匿名函数一般不会单独使用,而是配合其他方法,为其他方法提供内置的算法或判断条件。比如,使用排序函数sorted对多维数组或者字典排序时,就可以指定排序规则。

>>> a = [{'name':'B', 'age':50}, {'name':'A', 'age':30}, {'name':'C', 'age':40}]
>>> sorted(a, key=lambda x:x['name']) # 按姓名排序
[{'name': 'A', 'age': 30}, {'name': 'B', 'age': 50}, {'name': 'C', 'age': 40}]
>>> sorted(a, key=lambda x:x['age']) # 按年龄排序
[{'name': 'A', 'age': 30}, {'name': 'C', 'age': 40}, {'name': 'B', 'age': 50}]

再举一个数组元素求平方的例子,这次用map函数:

>>> a = [1,2,3]
>>> for item in map(lambda x:x*x, a):print(item, end=', ')1, 4, 9,

8.yield 以及生成器和迭代器

pyrhon内置了迭代函数 iter,用于生成迭代器,用法如下:

>>> a = [1,2,3]
>>> a_iter = iter(a)
>>> a_iter
<list_iterator object at 0x000001B2DE434BA8>
>>> for i in a_iter:print(i, end=', ')1, 2, 3,

yield 则是用于构造生成器的。比如,我们要写一个函数,返回从0到某正整数的所有整数的平方,传统的代码写法是这样的:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> def get_square(n):result = list()for i in range(n):result.append(pow(i,2))return result>>> print(get_square(5))
[0, 1, 4, 9, 16]

但是如果计算1亿以内的所有整数的平方,这个函数的内存开销会非常大,这是 yield 就可以大显身手了:

>>> def get_square(n):for i in range(n):yield(pow(i,2))>>> a = get_square(5)
>>> a
<generator object get_square at 0x000001B2DE5CACF0>
>>> for i in a:print(i, end=', ')0, 1, 4, 9, 16,

如果再次遍历,则不会有输出了。

9.装饰器

下面的例子,很好地展示了装饰器的优势。

>>> import time
>>> def timer(func):def wrapper(*args,**kwds):t0 = time.time()func(*args,**kwds)t1 = time.time()print('耗时%0.3f'%(t1-t0,))return wrapper>>> @timer
def do_something(delay):print('函数do_something开始')time.sleep(delay)print('函数do_something结束')>>> do_something(3)
函数do_something开始
函数do_something结束
耗时3.077

timer() 是我们定义的装饰器函数,使用@把它附加在任何一个函数(比如do_something)定义之前,就等于把新定义的函数,当成了装饰器函数的输入参数。运行 do_something() 函数,可以理解为执行了timer(do_something) 。

10.巧用断言assert

所谓断言,就是声明表达式的布尔值必须为真的判定,否则将触发 AssertionError 异常。

>>> def i_want_to_sleep(delay):assert(isinstance(delay, (int,float))), '函数参数必须为整数或浮点数'print('开始睡觉')time.sleep(delay)print('睡醒了')>>> i_want_to_sleep(1.1)
开始睡觉
睡醒了
>>> i_want_to_sleep(2)
开始睡觉
睡醒了
>>> i_want_to_sleep('2')
Traceback (most recent call last):File "<pyshell#247>", line 1, in <module>i_want_to_sleep('2')File "<pyshell#244>", line 2, in i_want_to_sleepassert(isinstance(delay, (int,float))), '函数参数必须为整数或浮点数'
AssertionError: 函数参数必须为整数或浮点数

Python十段经典代码相关推荐

  1. 学Python一定要知道的十段经典代码

    1.for - else 十大装B语法,for-else 绝对算得上囊波湾!不信,请看: >>> for i in [1,2,3,4]:print(i) else:print(i, ...

  2. Python十大经典语法合集

    Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了. 这里精心筛选了最能展现 Python 语法之精妙的十个知识点, ...

  3. 推荐 Python 十大经典练手项目,让你的 Python 技能点全亮!

    前言:如果有人问:"Python还火吗?""当然,很火.""哪能火多久呢?""不知道." 技术发展到现在衍生出许多种编程 ...

  4. Javascript中最常用的61段经典代码

    1. οncοntextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border οncοntextmenu ...

  5. 推荐Python十大经典练手项目,让你的Python技能点全亮!

    前言:如果有人问:"Python还火吗?""当然,很火.""哪能火多久呢?""不知道." 技术发展到现在衍生出许多种编程 ...

  6. python 十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...

  7. 【排序算法】python 十大经典排序算法(全网最详)

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...

  8. 在PPT的时候,发现用Python十几行代码就可以实现Logo换色

    @Author:Runsen 最近,在学习PPT设计的时候,需要对下面的Logo进行换色. 这个Logo是字体黑色,背景透明的图片. 如果将上面的Logo直接放在PPT中,由于是黑色的背景,在加上黑色 ...

  9. echarts世界地图更新,添加十段线

    最近地图咱们地图不是更新了嘛,地图上由以前的九段线变成了十段线 目前中国地图有找到GeoJson数据,但是世界地图想要加上十段线,我没找到GeoJson数据,就想着从中国地图里面获取json数据,最后 ...

最新文章

  1. netstat 查看mysql_CentOS 使用netstat察看mysql端口和连接
  2. 独家 | 综述:情感树库上语义组合的递归深层模型
  3. Docker(十二):Docker集群管理之Compose
  4. SVN提交,提示“remains in conflict”错误
  5. java回调使用小结
  6. [html] 你能否画出一个0.5px的直线?
  7. 韩顺平php视频笔记44 php小练习表单提交
  8. 微信小程序中使用setData修改变量数组或对象中的参数方法
  9. 中国大学生计算机设计大赛 历史作品博物馆
  10. javaweb基于SSH开发汽车4S店管理系统(前台+后台) 课程设计 毕业设计源码
  11. js数据在html乱码,通过网页查看JS源码中汉字显示乱码的解决方法
  12. java 序列号怎么获取,Java获得硬盘和主板的序列号代码
  13. glm/glm.hpp_从GLM到GBM(第2部分)
  14. 第29章基于锁的并发数据结构
  15. vuejs的学习笔记
  16. 华为手机像素密度排行_华为p40pro屏幕像素密度ppi是多少呢
  17. 转行产品经理必须要知道的三件事!
  18. 利用XGBoost实现短期电力负荷预测
  19. 光纤主干线路绕不过的一款光时域反射仪 TFN F7系列
  20. java百度上传控件_百度Bos上传文件工具类-BosUtils(java)

热门文章

  1. 数据类型及pythop运算符号
  2. 国网浙江电力组建网络安全分析室
  3. ueditor1.4.3配置过程(包含单独上传文件以及图片的使用)
  4. [转载]MVC、MVP以及Model2(下)
  5. 转PET灌装机的完善
  6. qt串口采用队列_基于STM32的RGB调色器——STM32程序和Qt上位机全开源
  7. 【学习笔记】JS基础语法一小时通
  8. 【QM-05】Material Specification(物料说明)
  9. SAP中Product Orders(生产订单)相关函数BAPI
  10. VOFM、Copy Control与合并开票