python 阅读github上某项目所得总结

有如下例子程序

a = [1, 2, 3]
b = (1, 2, 3)

if isinstance(a, (list, tuple)):
	print('1.ok')
else:
	print('1.error')

if isinstance(b, (list, tuple)):
	print('2.ok')
else:
	print('2.error')

if isinstance(a, (tuple, dict)):
	print('3.ok')
else:
	print('3.error')

if isinstance(b, (list, dict)):
	print('4.ok')
else:
	print('4.error')

if isinstance(a, (list, )):
	print('5.ok')
else:
	print('5.error')

if isinstance(a, (list)):
	print('6.ok')
else:
	print('6.error')
输出:

1.ok
2.ok
3.error
4.error
5.ok
6.ok
得出结论:isinstance的第二个参数可以是个元组,若第一个参数是这个元组中的任意值,则isinstance就返回真。最后的两个例子说明了,这两种写法等同于直接就写个'list'

再看下个例子

example = 'example'
result = example.split()

print(type(result))
输出:

<type 'list'>
可以看出一个特性:字符串经过split后,结果变成了一个list,内容没有刻意打印,其实是['example']

继续下个例子程序:

class Test:
	def __init__(self):
		pass

	def function(self):
		print('function')

t = Test()
res = reduce(getattr, ['function'], t)
res()
这个程序利用了reduce函数的特性。

reduce内部会有一个迭代的过程,而迭代的次数由第二个参数决定,此处可以看出,第二个参数是只有一个元素的list,所以可以肯定,reduce内部只迭代一次。而迭代的内容为将t和第二个参数的元素(此处为字符串‘function’)作为第一个参数函数的参数。其实此处的getattr函数可以类比为一个lambda d, x : d[x]。

reduce迭代一次后结束返回getattr的值,其实就是Test中于字符串'function'匹配的函数,最后一句当然是调用这个函数了

最后一个例子程序

from operator import attrgetter, itemgetter

ma_li = [{'a': 1, 'b': 1}, {'a': 2, 'b': 2}]
ma_li2 = [[1, 3, 3], [4, 2, 1], [3, 5, 4]]

print(sorted(ma_li, key=itemgetter('b'), reverse=False))
print(sorted(ma_li2, key=itemgetter(1), reverse=False))

class Taste:
	def __init__(self, a, b, c):
		self.a = a
		self.b = b
		self.c = c

	def __repr__(self):
		return '{} {} {}'.format(self.a, self.b, self. c)


ma_li3 = [Taste(1, 2, 3), Taste(1, 1, 2), Taste(3, 5, 5)]

print(sorted(ma_li3, key=attrgetter('b'), reverse=False))
这个例子是关于使用sorted函数对列表内容元素进行排序的时候,如何施以排序规则

输出:

[{'a': 1, 'b': 1}, {'a': 2, 'b': 2}]
[[4, 2, 1], [1, 3, 3], [3, 5, 4]]
[1 1 2, 1 2 3, 3 5 5]
总结:

若想学通python,那么必须理解python的属性机制,最近看的很多github上面的开源程序,大多都是利用了属性__dict__来完成了很多功能。其次python的功能库很多,得最起码的掌握几个,因为很多需求功能都是需要第三方库的

还得继续学习


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值