Python十大经典语法(第一节)
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。这里精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
1. for - else
什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的。十大装B语法,for-else 绝对算得上南无湾!不信,请看:
for i in [1,2,3,4]:
print(i)
else:
print(i, '我是else')
1
2
3
4
4 我是else
1
2
3
4
5
6
7
8
9
10
如果在 for 和 else 之间(循环体内)有第三者 if 插足,也不会影响 for 和 else 的关系。因为 for 的级别比 if 高,else 又是一个攀附权贵的家伙,根本不在乎是否有 if,以及是否执行了满足 if 条件的语句。else 的眼里只有 for,只要 for 顺利执行完毕,else 就会屁颠儿屁颠儿地跑一遍:
for i in [1,2,3,4]:
if i > 2:
print(i)
else:
print(i, '我是else')
3
4
4 我是else
1
2
3
4
5
6
7
8
9
那么,如何拆散 for 和 else 这对冤家呢?只有当 for 循环被 break 语句中断之后,才会跳过 else 语句:
for i in [1,2,3,4]:
if i>2:
print(i)
break
else:
print(i, '我是else')
3
1
2
3
4
5
6
7
8
Python十大经典语法(第一节)
2. 一颗星()和两颗星()*
有没有发现,星(*)真是一个神奇的符号!想一想,没有它,C语言还有啥好玩的?同样,因为有它,Python 才会如此的仪态万方、风姿绰约、楚楚动人!Python 函数支持默认参数和可变参数,一颗星表示不限数量的单值参数,两颗星表示不限数量的键值对参数。
我们还是举例说明吧:设计一个函数,返回多个输入数值的和。我们固然可以把这些输入数值做成一个list传给函数,但这个方法,远没有使用一颗星的可变参数来得优雅:
def multi_sum(*args):
s = 0
for item in args:
s += item
return s
multi_sum(3,4,5)
12
1
2
3
4
5
6
7
8
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}
1
2
3
4
5
6
7
8
9
此外,一颗星和两颗星还可用于列表、元组、字典的解包,看起来更像C语言:
a = (1,2,3)
print(a)
(1, 2, 3)
print(*a)
1 2 3
b = [1,2,3]
print(b)
[1, 2, 3]
print(*b)
1 2 3
c = {'name':'xufive', 'age':51}
print(c)
{'name': 'xufive', 'age': 51}
print(*c)
name age
print('name:{name}, age:{age}'.format(**c))
name:xufive, age:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
3. 三元表达式
熟悉 C/C++ 的程序员,初上手 python 时,一定会怀念经典的三元操作符,因为想表达同样的思想,用python 写起来似乎更麻烦。比如:
y = 5
if y < 0:
print('y是一个负数')
else:
print('y是一个非负数')
y是一个非负数
1
2
3
4
5
6
7
其实,python 是支持三元表达式的,只是稍微怪异了一点,类似于我们山东人讲话。比如,山东人最喜欢用倒装句:打球去吧,要是不下雨的话;下雨,咱就去自习室。翻译成三元表达式就是:
打球去吧 if 不下雨 else 去自习室
来看看三元表达式具体的使用:
y = 5
print('y是一个负数' if y < 0 else 'y是一个非负数')
y是一个非负数
1
2
3
python 的三元表达式也可以用来赋值:
y = 5
x = -1 if y < 0 else 1
x
1
1
2
3
4
4. with - as
with 这个词儿,英文里面不难翻译,但在 Python 语法中怎么翻译,我还真想不出来,大致上是一种上下文管理协议。作为初学者,不用关注 with 的各种方法以及机制如何,只需要了解它的应用场景就可以了。with 语句适合一些事先需要准备,事后需要处理的任务,比如,文件操作,需要先打开文件,操作完成后需要关闭文件。如果不使用with,文件操作通常得这样:
fp = open(r"D:CSDNColumntempmpmap.py", 'r')
try:
contents = fp.readlines()
finally:
fp.close()
1
2
3
4
5
如果使用 with - as,那就优雅多了:
with open(r"D:CSDNColumntempmpmap.py", 'r') as fp:
contents = fp.readlines()
1
2
5. 列表推导式
在各种稀奇古怪的语法中,列表推导式的使用频率应该时最高的,对于代码的简化效果也非常明显。比如,求列表各元素的平方,通常应该这样写(当然也有其他写法,比如使用map函数):
a = [1, 2, 3, 4, 5]
result = list()
for i in a:
result.append(i*i)
result
[1, 4, 9, 16, 25]
1
2
3
4
5
6
7
如果使用列表推导式,看起来就舒服多了:
a = [1, 2, 3, 4, 5]
result = [i*i for i in a]
result
[1, 4, 9, 16, 25]
1
2
3
4
事实上,推导式不仅支持列表,也支持字典、集合、元组等对象。有兴趣的话,大家可以自行研究。
篇幅原因,下一节会继续为大家更新Python语法第二节!大家可以期待一下!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JAVA面试解析(有赞一面)
引言 说在前面的话:本文适合人群:急等着换工作的人 本文不适合人群:专攻JAVA某方面技术的人 正文 一面 1、自我介绍评注:这个地方答什么随意,大部分面试官不会听你介绍,这个时间都在看简历。如果是电话面,回答时间控制在40秒到1分钟左右就行。如果是现场面,那就好办了,你注意看面试官什么时候抬头看你,一般面试官放下简历,抬头看你的时候,赶紧收尾!回答:我叫xx,毕业于xxx,兴趣xx,做过xx项目…. 2、Map 的底层结构?(HashMap)评注:老题目了,各位面试的人员必须熟记!回答:Map是以键值对来存储对象的,它的底层实际上是数组和链表来组成的,经典的一张图如下(别人画的); 当使用get方法时,先查找出数组位置是否存在对象,通过key.hashcode对数组长度取余;如果不存在,则返回为空,如果存在,则遍历链表,判断链表里面是否存在key值与传递过来的key值一样的对象,存在,则把key值对应的value取出返回,不存在,则返回为空; 3、线程安全的 Map (concurrentHashMap)简单的说了下这两 1.7 和 1.8的区别,本想问下要不要深入的讲下(源码级别)...
- 下一篇
java.nio包的分析(一)--Buffer类
什么是nio,看看百度百科的解释: 好的,下面来说一下,nio下的包的目录结构,总体来说,Nio算的上Java后来添加的一项高级属性了吧。 目录很清晰,通过目录名称也基本知道他的一些主要的功能分类,下面从上往下开始逐步的研究它的源代码,Java.nio下面直接的类为一堆的Buffer缓冲类,后面的各种Channel都是基于Buffer类进行操作的。 首先我们当然得先了解里面最最原始的类,Buffer的构成,才能明白后面衍生出的各种基本裂隙对于的Buffer 类 Buffer类的后续操作都是基于这几个值进行操作的,不信,接着往下看, 下面在来看看其中继承下来的一个类,IntBuffer,其他相应数据类型,与此相似,所以不做分析 里面主要有一些操作,比如put,get,还有一个比较的方法 另外在这个类里面还有一个比较奇葩的类MappedByteBuffe,内存映射Buffer: 原文转载自:https://blog.csdn.net/Androidlushangderen/article/details/39735101
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8