在学python的过程中,遇到了很多看不懂的代码,也学到了一些小技巧,下面是我积累的点点滴滴:
Skill 1: emumerate函数
函数原型 :enumerate(sequence, [start=0])
功能 :将可循环序列sequence以start开始分别列出序列数据和数据下标
例子 :如果要将一个列表元素列出来,可以这样子:
iterable = ["apple", "banana", "cherry", "dog"]
for i, item in enumerate(iterable):
print(i, item)
Skill 2: 列表解析
使用方法 :[] 、不含逗号
list = [funct(i) for i in range(0, n) [if condition]],其中条件部分可省略
my_list = [funct(k) for k in range(start, end)]
例子 :
squares = [k**2 for k in range(1, 11)]
print(squares)
输出结果: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Skill 3: 遍历字典
函数 :values(), keys(), items()
- keys():返回一个dict_keys类型的数据,可以用for遍历元素
- values:返回一个dict_values类型的数据,可以用for语句遍历元素
- 返回一个dict_items类型的元素,包含多个二元组,可以用for语句遍历
例子 :
dictionary = {"a": "Python", "b": "Java", "c": "C++"}
for key in dictionary.keys():
print(key)
for value in dictionary.values():
print(value)
for item in dictionary.items():
print(item)
for key, value in dictionary.items():
print(key, value)
Skill 4: eval函数
函数原型 :eval(expression, [globals], [locals])
功能 :eval() 函数用来执行一个字符串表达式,并返回表达式的值。
例子 :
str = "print(2**4)"
eval(str)
Skill 5: 列表/字符串 逆序
方法1:调用reverse()函数
a = [1, 2, 3, 4]
a.reverse()
print(a)
方法3:使用str[::-1],返回逆序序列/字符串,但不修改原来的字符串/序列
a = [1, 2, 3, 4]
s = "abcdefg"
print(a[::-1])
print(s[::-1])
Skill 6: 三元运算
三元运算符是if-else的快捷操作,被被称为条件运算。类似C++里面的:n = (condition ? a : b) —— 满足条件时n=a,否则n=b
使用:
[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y
Skill 7: if结果简化
使用:
if n in [1, 2, 3, 4]:
if n==1 or n==2 or n==3 or n==4:
Skill 8: filter函数
函数原型 :filter(function, iterable)
功能 :序列中的每个元素作为参数传递给函数进行判断,返回True或者False,最后将返回True的元素放到新列表中.
例子 :
def is_odd(n):
return n%2 == 1
L = [1, 2, 3, 4, 5, 6, 7, 8]
L1 = list(filter(is_odd, L))
print("L1 = ", L1)
print("L = ", L)
Skill 9: pass
使用:pass可以构造处不做任何事情的主体,pass什么也没做,只是为了占位
for i in range(0, 11):
pass
def function(arg):
pass
class L():
pass
Skill 10: lambda
简介:lambda可以用来定义简单函数,是匿名函数。
特点:
- lambda定义的是单行函数
- lambda参数列表可以包含多个参数,如 lambda x, y: x + y
- 默认返回表达式中的计算结果
语法
funct = lambda arguments :function_body
参数个数
funct = lambda : 1
funct = lambda a1, a2 : a1+a2
功能
funct = lambda a : a%2 == 0
def funct(a):
return a%2 == 0
print(funct(2))
Skill 11: yield关键字
当执行到yield语句时,函数会被冻结,函数返回数值,下一次执行函数从上一次冻结的位置开始。
使用:
def gen(n):
for i in range(n):
yield i**2
for i in gen(5):
print(i, " ", end="")
对比: yield和 普通写法:
前者占用1个空间,后者占用n个空间
def gen(n):
for i in range(n):
yield i**2
def square(n):
ls = [i**2 for i in range(n)]
return ls
for i in gen(5):
print(i, " ", end="")
print("")
for i in square(5):
print(i, " ", end="")
使用yield优势:
- 更节省存储空间(当 n 取值很大时)
- 响应更加迅速
- 使用更加灵活