1.zip函数
对两个可迭代对象同一位置打包,返回为tuple。(a[1], b[1]),..., (a[i], b[i])...
>>> a = ['a', 'b', 'c', 'd']
>>> b = ['1', '2', '3', '4']
>>> list(zip(a, b))
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
# python3中返回为tuple的迭代器,需用list转换其为列表
如果几个参数不等长,取最短的那个参数的长度,舍弃超出最短长度的成员。
解包:zip(*)
result = zip(a, b)
origin = zip(*result) #*:解包运算符
用法:
同时遍历多个字典
>>> dict_one = {'name': 'John', 'last_name': 'Doe', 'job': 'Python Consultant'}
>>> dict_two = {'name': 'Jane', 'last_name': 'Doe', 'job': 'Community Manager'}
>>> for (k1, v1), (k2, v2) in zip(dict_one.items(), dict_two.items()):
... print(k1, '->', v1)
... print(k2, '->', v2)
...
name -> John
name -> Jane
last_name -> Doe
last_name -> Doe
job -> Python Consultant
job -> Community Manager
对多个元素排序:
names = ['John', 'Amy', 'Jack']
scores = [98, 100, 85] # 分数和名字是一一对应的
data = list(zip(names, scores))
data.sort() # 以names进行排序
# [('Amy', 100), ('Jack', 85), ('John', 98)]
data2 = list(zip(scores, names))
data2.sort()# 以scores进行排序
# [(85, 'Jack'), (98, 'John'), (100, 'Amy')]
2.python eval函数
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
a = 'x + x + 5'
x = 5
eval(a) # 25 将字符串变为表达式
3. UnboundLocalError
这种错误的原因在于在内部定义了外部变量。
解决办法:在内部变量前加上global
number = 5
def add():
number+=3
return number
add()
# UnboundLocalError: local variable 'number' referenced before assignment
number = 5
def add():
global number
number+=3
return number
add()
# 8
在内部定义global变量后,内部函数都无需设置return了
number = 5
def add():
global number
number+=3
print(number)
add()
print(number)
# 5
# 8