内嵌函数
print(objects="",end="\n", flush=False)
- flush: 是否强制刷新缓存
- end: 结束符号
id(object)
返回对象的唯一标识符
random
random.shuffle(list)
将序列内的元素随机打乱。
字典
字典的两种访问方式:
#第一种,直接for循环,访问的是字典的键:
for key in dict_student:
print (key)
# 第二种,访问两个值
for key, value in dict_student.items():
print(key, value)
#分别对 key 和 value 进行访问
for key in dict_student.keys():
print (key)
for value in dict_student.values():
print (value)
解包和压包
参考文献:https://zhuanlan.zhihu.com/p/38914391
list
是一个整体,把每个元素从list
中剥离的过程,叫做解包,相反,称为压包。
可迭代对象都可以解包,不过解包后赋值元素需要保持一直:
# 简单解包
>>> lis = ["apple", "orange", "banana", "cherry"]
>>> a,b,c,d = lis
>>> a
'apple'
>>> b
'orange'
>>> c
'banana'
>>> d
'cherry'
# * 的作用
>>> e, *f, g = lis
>>> e
'apple'
>>> f
['orange', 'banana']
>>> g
'cherry'
*
表示多个元素,参考参数列表中*
,很好理解
对于两个可迭代的对象,将它们对应的元素打包成为一个个的元组,返回这些对象组成的列表,zip(iteration a, iteration b)
:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> list(zip(a,b))
[(1, 4), (2, 5), (3, 6)]
如果两个 可迭代对象长度无法对齐,那么以较短的那个作为长度标准。
有一些元素不使用的时候, _
就是可以作为忽略那些元素的习惯。
lambda
看到一句话:明了胜于晦涩, 很棒。
lambda: 参数:运算
最小的函数定义:
f = lambda x,y:x+y
f(1,2)
>>> 3
def func(a):
return lambda x:a*x
express = func(3)
ans = express()
ans(4)
>>> 12
所以, lambda
更多的可以看做一个类,经过定义的lambda表达式
可以作为对象:
f = lambda x:x*x
>>> <function <lambda> at 0x7fac54f619e0>
filter(function, iteration)
filter
函数,是一个过滤器, iteration
的元素迭代的作为 function
的输入,如果迭代元素对应的 function
输出是 True
,则保留, 否则过滤。
这个函数的形式更类似于一个筛子,返回的值是 list
,而只有在迭代这个返回值list
的时候,这个筛子才开始真正的启动,否则它就默默的躺着,也不会因为 function
中的 bug 报错。
def func(x):
"""保留正整数""
if isinstance(x,int) and x>0:
return True
else:
return False
nums = [1,-1,2,-2,3,-4, "test"]
inter = filter(func, nums)
# list化 实际上就是在迭代 filter
print(list(inter))
>>> [1, 2, 3]
for i in filter(func,nums):
print(i)
>>>1
>2
>3
print(inter)
>>> <filter object at 0x7ff02729d0d0>