什么?不是 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 我是else
如果在 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)
4 我是else
那么 ,如何拆散这对冤家呢?只有当 for 循环被 break 语句中断之后,才会跳过 else 语句:
>>> for i in [1,2,3,4]:
if i>2:
print(i)
break
else:
print(i, 我是else)
lambda 听起来很高大上 ,其实就是匿名函数(了解js的同学一定很熟悉匿名函数) 。匿名函数的应用场景是什么呢?就是仅在定义匿名函数的地方使用这个函数 ,其他地方用不到,所以就不需要给它取个阿猫阿狗之类的名字了 。下面是一个求和的匿名函数 ,输入参数有两个 ,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,
在各种稀奇古怪的语法中,列表推导式的使用频率应该时最高的 ,对于代码的简化效果也非常明显 。比如 ,求列表各元素的平方,通常应该这样写(当然也有其他写法 ,比如使用map函数):
>>> 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]
# 兄弟们学习python,有时候不知道怎么学 ,从哪里开始学 。
# 掌握了基础知识或者做了两个案例后 ,不知道下一步怎么学习 。
# 那么对于这些好兄弟 ,我准备了大量的免费视频教程 ,数百本PDF电子书籍 ,以及源代码!
# 直接在这个裙 708525271 自取就好了
Python 引入负整数作为数组的索引 ,这绝对是喜大普奔之举 。想想看 ,在C/C++中 ,想要数组最后一个元素 ,得先取得数组长度,减一之后做索引 ,严重影响了思维的连贯性。Python语言之所以获得成功 ,我个人觉得,在诸多因素里面 ,列表操作的便捷性是不容忽视的一点 。请看:
>>> 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]
熟悉 C/C++ 的程序员 ,初上手 python 时 ,一定会怀念经典的三元操作符 ,因为想表达同样的思想 ,用python 写起来似乎更麻烦 。比如:
>>> y = 5
>>> if y < 0:
print(y是一个负数)
else:
print(y是一个非负数)
y是一个非负数
其实 ,python 是支持三元表达式的 ,只是稍微怪异了一点 ,类似于我们山东人讲话。比如,山东人最喜欢用倒装句:打球去吧 ,要是不下雨的话;下雨 ,咱就去自习室 。翻译成三元表达式就是:
>>> y = 5
>>> print(y是一个负数 if y < 0 else y是一个非负数)
y是一个非负数
>>> y = 5
>>> x = -1 if y < 0 else 1
>>> x
1
所谓断言,就是声明表达式的布尔值必须为真的判定 ,否则将触发 AssertionError 异常 。严格来讲 ,assert是调试手段,不宜使用在生产环境中 ,但这不影响我们用断言来实现一些特定功能 ,比如 ,输入参数的格式 、类型验证等。
>>> 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_sleep
assert(isinstance(delay, (int,float))), 函数参数必须为整数或浮点数
AssertionError: 函数参数必须为整数或浮点数
这个就很常见了 ,几乎是学过一点python语言的小伙伴都会知道while语句的啦 ,如:
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input(请输入: ))
if number < answer:
print(大一点)
elif number > answer:
print(小一点)
else:
print(恭喜你猜对了!)
break
print(你总共猜了%d次 % counter)
if counter > 7:
print(你的智商余额明显不足)
with 这个词儿 ,英文里面不难翻译 ,但在 Python 语法中怎么翻译 ,我还真想不出来 ,大致上是一种上下文管理协议 。作为初学者,不用关注 with 的各种方法以及机制如何 ,只需要了解它的应用场景就可以了 。with 语句适合一些事先需要准备 ,事后需要处理的任务,比如 ,文件操作 ,需要先打开文件,操作完成后需要关闭文件 。如果不使用with ,文件操作通常得这样:
fp = open(r"D:\CSDN\Column\temp\mpmap.py", r)
try:
contents = fp.readlines()
finally:
fp.close()
>>> with open(r"D:\CSDN\Column\temp\mpmap.py", r) as fp:
contents = fp.readlines()
好了 ,你如果以上都会的话 ,那我要给你一个大大的赞(我绝对不会告诉你 ,我都不知道assert ,哈哈哈哈)
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。