三元表达式,在条件二选一的时候比较推荐使用。
不使用三元表达式情况下的 if 语句:
if len('XWenXiang') > 6:
print(111)
else:
print(222)
代码会显得复杂不精简,使用三元表达式:
print(111) if len('XWenXiang') > 6 else print(222)
使用后一行代码会显得很精简。
三元表达式语法:
语句A if 条件 else 语句B
条件如果成立也就是 True 使用 语句A
条件如果不成立也就是 False 使用 语句B
表达式应用:
x = 'XWenXiang' if '大帅哥' else '假的'
print(x)
注意点:
三元表达式不建议使用嵌套,也就是 if 嵌套
代码示例:
(print(111)if 1>2 else print(222)) if len('XWenXiang')>6 else print(333)
示例中代码这样看起来语法不简洁,所以不推荐使用
if len('XWenXiang') > 6:
if 1 > 2:
print(111)
else:
print(222)
else:
print(333)
此时使用原本的样式反而层次更简洁。
三元表达式可以看作是 if 的简写,不过 if 也可以这么写:
if len('XWenXiang') > 6:print(111)
else:print(333)
生成式
注意点,没有元组生成式,因为依据这种写法的称之为迭代器
列表生成式:该技术主要可以简化代码
举例说明
list_a = ['X', 'W', 'Xiang']
---给定一个列表,如果我们要在列表的每个元素后面加字符串'_abc',首先有可能想到的是对列表进行循环
相加后添加到新的列表中---
list_a = ['X', 'W', 'Xiang']
list_b = []
for i in list_a:
i += '_abc'
list_b.append(i)
print(list_b)
但是这种看上去会比较复杂,我们可以用列表生成式来进行简化
list_a = ['X', 'W', 'Xiang']
list_b = [i + '_abc' for i in list_a]
print(list_b)
这种方式使代码更加简洁,首先定义一个列表用于接收改变后的元素,将 for 循环语句放在新列表的括号里,
for 循环语句的前面放循环变量,让循环变量作为新列表的元素,这时候我们就可以对其进行修改操作。
我们也可以在列表生成式中进行 if 条件判断
代码示例一:
list_a = ['X', 'W', 'Xiang']
list_b = [i + '_abc' for i in list_a if len(i) > 3]
print(list_b)
不同的是,在 for 循环后有着一个 if 判断语句,这样可以满足我们的筛选要求。
代码示例二
使用生成式也可以简洁的对列表内的所有元素增值
list_a = [1, 2, 3, 4, 5]
list_b = [i + 1 for i in list_a if i != 3]
print(list_b)
打印结果:
[2, 3, 5, 6]
上面的代码中,首先遍历了列表 list_a 中的元素,判断元素是否等于 3 ,不等于 3 的所有元素先加 1
在放入新列表,而等于 3 的元素则会直接被跳过。
字典生成式
有列表生成式也就有字典生成式,主要的功能也是简化代码。
举例说明一
list_a = ['name', 'age', 'pwd']
list_b = ['XWenXiang', 18, 123]
---给定俩个列表,使其中的元素按照顺序分别作为键名和键值来组成一个字典,我们会先创建一个空字典用
于接收数据,然后按照索引取出列表里的数据并当作键值对---
list_a = ['name', 'age', 'pwd']
list_b = ['XWenXiang', 18, 123]
dict_a = {}
for i in range(len(list_a)):
dict_a[list_a[i]] = list_b[i]
print(dict_a)
这种方式看起来很复杂不简洁,我们可以通过字典生成式来使用。
list_a = ['name', 'age', 'pwd']
list_b = ['XWenXiang', 18, 123]
dict_a = {list_a[i]: list_b[i] for i in range(len(list_a))}
print(dict_a)
和列表生成式一样,先进行 for循环,循环出来的就是列表中各个元素的索引,所以此时可以将俩列表中的元
素用索引取出并按照字典的键值对形式排列存到空字典。
同样的,在字典生成式里也可以添加 if 判断条件进行筛选
list_a = ['name', 'age', 'pwd']
list_b = ['XWenXiang', 18, 123]
dict_a = {list_a[i]: list_b[i] for i in range(len(list_a)) if i != 1}
print(dict_a)
在这我写的 if 是当索引不为 1 的时候添加到空字典中。
集合生成式
集合生成式也一样,也有 for 循环和 if 判断
注意点,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
set_a = {i for i in range(10) if i != 4}
print(set_a)
匿名函数看着名字也能猜到它是一个没有函数名字的函数,它不用关键字 def 来声明函数名。 lambda函数能接收任何数量的参数,返回一个值
命名匿名函数的语法格式为: lambda 形参:返回值
代码示例一
y = lambda x: x + 2
print(y(1))
我们可以通过这种方式直接使用
如果不用匿名函数的方式来实现的话:
def index(x):
return x+2
print(index(1))
相对行数会多些。
获取最大值
代码示例二
---获取最大值---
如果是数字列表我们直接使用方法 max() 就行
list_a = [1, 23, 4, 45, 32, 56, 67, 34, 97]
print(max(list_a))
但是如果是字典使用 max() 方法会怎么样呢?
dict_a = {'a': 123128, 'b': 24543, 'c': 6764}
print(max(dict_a))
输出的结果是 c ,明明字典中 a 的键值最大却输出了键值最小的 c ,在字典中使用 max() 其实比的是键
名,如果键名是字符串,那么会按照 ASCII码表 来对字符串进行比较。
我们去看 max()的原格式:
def max(*args, key=None)
'''其中 key 后面跟的是函数名,注意没有括号,当有 key 值函数名的时候,函数返回了什么就比较什么,
可以理解为 key 值用来设置比较的规则。'''
所以我们可以改变 key 的值来比较字典键值大小,有下列俩种方法:
1. 方式一
dict_a = {'a': 123128, 'b': 24543, 'c': 6764}
def index(x):
return dict_a[x]
print(max(dict_a, key=index))
定义一个函数 index() 并定义形参 x ,返回函数值是字典的键值。使用 max()并将参数 key 的值设为函
数名 index ,此时比较的内容就是字典的键值,比较完 max() 返回的值是字典的键名。
2. 方式二
方式二是对方式一的简略写法,使用了匿名函数
dict_a = {'a': 123128, 'b': 24543, 'c': 6764}
print(max(dict_a,key=lambda x:dict_a[x]))
3. 方式三
dict_a = {'a': 123128, 'b': 24543, 'c': 6764}
print(max(dict_a,key=dict_a.get))
使用 get方法也能达到同样的效果。
|