【Python】Python中有意思的短语句

本文长期更新,直到不再使用Python。本文主要收集整理短小的Python代码片段。文中代码均可直接在网页中运行、调试、查看运行结果,方便动手实践,加强印象。

1 Python在线运行

此处非广告行为,仅方便大家动手实践。因为无需登录即可运行Python代码的网址并不多,如果有更好的网站,欢迎评论补充。
Python3 在线工具 | 菜鸟工具 (runoob.com)https://c.runoob.com/compile/9/

点击进入网址后,粘贴代码,点击运行即可查看结果。

2 代码片段

1. 生成多个同类型的对象

class Apple():
    def __init__(self):
        print("create a Apple.")

# appA = Apple()
# appB = Apple()
# appC = Apple()

# 可简写成:
appA, appB, appC = [Apple() for x in range(0,3)]

# 三个对象同类型但各不相同
print(appA)
print(appB)
print(appC)

输出:

create a Apple.
create a Apple.
create a Apple.
<__main__.Apple object at 0x00000122573A8D00>
<__main__.Apple object at 0x00000122573A8CD0>
<__main__.Apple object at 0x00000122573A8E80>

2. 易犯的乘除错误

a = (8*100 - 6*100)/2*100
# 此时a是多少,是不是1呢?

# 可将下面代码粘贴到编译器里运行看看
print((8*100 - 6*100)/2*100)

3. 慎用 dict 的 [ ] 索引方式

# 正常代码
info = {'name':'Lucy Li', 'sex': 'female'}
if info['name'] and 'Lucy' in info['name']:
	print("Yes")
else:
	print("不是Lucy")

如果我们犯了错误,想从 info 中获取 年龄 age,那会怎么样呢?

# 错误代码
info = {'name':'Lucy Li', 'sex': 'female'}
if info['age']:
	print("Yes")
else:
	print("没有年龄信息")

这段代码会正常的输出 : 没有年龄信息  么,答案是并不会,不仅不会,而且还会使你的整个软件崩溃!(当然如果我们处理了异常,就不会导致整个软件崩溃,这里不深入讨论异常处理)

输出如下:

【Python】Python中有意思的短语句_第1张图片

 说明报错了,那是因为Python解释器未在 Info 字典中找到 age 关键字,所以就抛出异常。

安全的写法应该是使用字典的 get() 方法:

# 安全代码
info = {'name':'Lucy Li', 'sex': 'female'}
if info.get('age'):
	print("Yes")
else:
	print("没有年龄信息")

输出:

4. 判空

python 的对象在使用前,需要逐步判断是否空对象。举例如下。

当代码没有差错时:

# python 3
# 代码没有错误时
class Color:
    def __init__(self, rgb):
        self.rgb = rgb

class Apple:
	def __init__(self):
		self.color = Color("red")  # 当代码一切正常时

apple = Apple()

if apple and apple.color and apple.color.rgb == "red":
    print("The apple is red.")
else:
    print("Oh shit, what happened? It's impossible.")

运行正常,输出 The apple is red.

当代码有点小意外时:

# 更安全的代码,健壮性更好
# 代码出现小意外
class Color:
    def __init__(self, rgb):
        self.rgb = rgb

class Apple:
	def __init__(self):
		self.color = None  # 这里出现了点意外,忘了赋值

apple = Apple()

if apple and apple.color and apple.color.rgb == "red":
    print("The apple is red.")
else:
	print("虽然代码中出现意外,但是程序依然正常运行,一切尽在掌握。")

输出:

不安全的代码:

# 不安全的代码
# 代码出现小意外
class Color:
    def __init__(self, rgb):
        self.rgb = rgb

class Apple:
	def __init__(self):
		self.color = None  # 这里出现了点意外,忘了赋值

apple = Apple()

if apple.color.rgb == "red":  # 程序会在这一行终止
    print("The apple is red.")
else:
	print("你看不到我,因为这里不会被执行,程序会直接终止")

 输出:

【Python】Python中有意思的短语句_第2张图片

 Python解释器指出 apple.color 是空类型对象 NoneType object,也即 apple.color 是 None。

5. 包含None的列表并不为空

a = None
mylist = [a]
if mylist:
	print("WTF!")
	print("what's in mylist: " + str(mylist))
else:
	print("Should be False")

输出:

这说明了啥: None在列表中也算个元素,此时列表并不是空列表。 

此时需要使用如下代码过滤掉列表中的None元素:

# 过滤列表中的 None 元素
my_list = [1, 2, 3, None, 5, None, 7, 8]  
non_none_list = [x for x in my_list if x is not None]

你可能感兴趣的:(python,开发语言)