Python减少复制代码的方法有很多,其中不乏是出于用一个容器放代码,然后以一个规则来取用。
Python里边有这么一个通用的模式:
- 拿一个类似 键=值 风格的容器
- 通过 键的名称获得其中值
首先想到的就是字典了:
dic={}
dic={'name':'Bob','age':'40'}
dic['age']
Out[2]: '40'
对于一个字典来说,键是一个字符串,获得值的语法是[键]。对于一个模块来说,键是函数或者变量的名称,而语法是‘.键’ 。除了这个基本上没有差别了。
比如现在有这么一个模块,他的名字叫做myprint.py:
#!/usr/bin/python
#coding=utf8
print"千寻"
myheart = "琥珀川"
def whoinyourheart(name):
print"{0} heart in my hand\n".format(name)
我来执行导入:
python
>>> import myprint
千寻
>>> myprint.myheart
'\xe7\x90\xa5\xe7\x8f\x80\xe5\xb7\x9d'
>>> myprint.whoinyourheart('zhouyunlai')
zhouyunlai heart in my hand
所以某块可以理解为一种特殊的字典,通过它们可以存储一些Python代码(变量,函数),可以通过‘.’操作符来访问这些代码。
Python中的类也可以执行类似的功能,我们可以把函数和数据放到一个容器中,通过‘.’来访问它们。
现在我在myprint.py中来定义一个类(作者快三十岁了,终于写出了一个类):
class Mystuff(object):
def __init__(self):
self.stangerine = 'And now a thousand years between'
def apple(self):
print"I AM CLASS APPLES!"
这段代码差不多就是模拟了一个名字叫Mystuff的模块,这里面有一个叫apple的函数,最难懂的恐怕是init 了。类与某块的主要差别是可以拿类创建出很多出来,哪怕一次一百万个,它们也不会相互干涉。而对于模块来说,一次导入之后,整个程序就那么一份内容。
既然类和模块差不多,那么对于类来说也必然有一个类似导入(import)的概念,这个名称就是实例化,当我们将一个类实例化之后就得到了一个对象。
>>> import myprint
千寻
>>> thing=myprint.Mystuff()
>>> thing.apple
<bound method Mystuff.apple of <myprint.Mystuff object at 0x7f0745e90f90>>
>>> thing.stangerine
'And now a thousand years between'
>>> thing.apple()
I AM CLASS APPLES!
然后还有几种,比如通过列表的下标来获取元素;通过配置文件来获取配置信息以及字符串格式化等均是键值容器。
网友评论