value1 = 'one'
value2 = 2
string = "The values are {0} and {1}".format(value1, value2)
self.assertEqual("The values are one and 2", string)
怎么觉得这种语法这么麻烦了。。应该还有更简单的
def test_any_python_expression_may_be_interpolated(self):
import math # import a standard python module with math functions
decimal_places = 4
string = "The square root of 5 is {0:.{1}f}".format(math.sqrt(5), \
decimal_places)
self.assertEqual('The square root of 5 is 2.2361', string)
注意ord的意思是 ASCCII码值?
self.assertEqual(97, ord('a'))
正则表达式的这种方法很好呀。。。
string = "the,rain;in,spain"
pattern = re.compile(',|;')
words = pattern.split(string)
raw_strings 这种用法很有意思 不用每一个转义
string = r'\n'
这两个是什么意思? 有什么区别?
self.assertEqual("Guido", 'guido'.capitalize())
self.assertEqual("Guido Van Rossum", 'guido van rossum'.title())
most confusing
self.assertEqual((), tuple()) # Sometimes less confusing
self.assertEqual(("S","u","r","p","r","i","s","e","!"), tuple("Surprise!"))
私有变量会在代码生成之前被转换为长格式(变为公有)。转换机制是这样的:在变量前端插入类名,再在前端加入一个下划线字符。这就是所谓的私有变量轧压(Private name mangling)。
class Dog(object):
def name(self):
return "Fido"
def _tail(self):
# Prefixing a method with an underscore implies private scope
return "wagging"
def __password(self):
return 'password' # Genius!
# But this still is!
self.assertEqual(__, rover._Dog__password())
def generator_with_coroutine(self):
result = yield
yield result
def test_generators_can_take_coroutines(self):
generator = self.generator_with_coroutine()
# THINK ABOUT IT:
# Why is this line necessary?
#
# Hint: Read the "Specification: Sending Values into Generators"
# section of http://www.python.org/dev/peps/pep-0342/
next(generator)
self.assertEqual(__, generator.send(1 + 2))
basestirng 是什么?
assertMatch 如何使用?
注意哪里开哪里闭区间? noms = ['peanut', 'butter', 'and', 'jelly'] self.assertEqual(['peanut'], noms[0:1]) self.assertEqual([], noms[2:2])
这些都是空? self.assertEqual([], noms[4:0]) self.assertEqual([], noms[4:100]) self.assertEqual([], noms[5:0])
这些都是对的。。 self.assertEqual([0,1,2,3,4], range(5)) self.assertEqual([5,6,7,8], range(5, 9))
搞错意思了。。。。 stack = [10, 20, 30, 40] popped_value = stack.pop(1)
这种用法不常见呀。。。
list 的 fromkeys 用法,这里需要注意
这种用法确实不常用呀
怎么觉得这种语法这么麻烦了。。应该还有更简单的
def test_any_python_expression_may_be_interpolated(self): import math # import a standard python module with math functions
注意ord的意思是 ASCCII码值?
self.assertEqual(97, ord('a'))
正则表达式的这种方法很好呀。。。
raw_strings 这种用法很有意思 不用每一个转义
这两个是什么意思? 有什么区别?
most confusing
对于 truple 而言 顺序很重要呀 lat = (37, 14, 6, 'N') lon = (115, 48, 40, 'W') place = ('Area 51', lat, lon) self.assertEqual(('Area 51',(37, 14, 6, 'N'),(115, 48, 40, 'W')), place)
私有变量会在代码生成之前被转换为长格式(变为公有)。转换机制是这样的:在变量前端插入类名,再在前端加入一个下划线字符。这就是所谓的私有变量轧压(Private name mangling)。
class Dog(object): def name(self): return "Fido"
python 中 set 模块的使用
可以看成 去重复的 其作用也可以从下面看出来
def test_convert_the_set_into_a_list_to_sort_it(self): self.assertEqual(['1','2','3','4','5'], sorted(set('13245')))
python 中的 与 或等运算
集合运算 还听有意思哈
~
range(1,6) 没有6 奥,这个很容易错
stages = iter(['alpha', 'beta', 'gamma']) next 迭代器中next的用法
迭代器的使用
list 作用到一个迭代器时的效果 直到next 为空?
如果在一个函数里面用到了yield表达式,那么这个函数就是一个generator函数
上面生成了一个迭代器?
下面的这段用法还是很诡异的?
generator.send()
继续执行一个generator函数。value这个参数变成了当前的yield表达式的值。send返回下一个yield产生的值,如果后面没有yield了,会抛出StopIteration异常。当调用send()来启动generator的时候,value这个参数必须是None,因为这个时候没有yield表达式来接受参数
访问变量的另一种方法
property函数 的使用 这里需要注意两点
确实使用property函数 可以简单不少..
使用装饰器同样可以达到上述的效果..
assertRaises 用来检测 self.Dog5 失败抛出的错误类型
built_in_classes_can_be_be_monkey_patched 这种方法也很好用
这里 需要考虑 类里面的方法具有 im_self 属性
class Class(object): def method(self): return "parrot"
class AboutMethodBindings(Koan): def test_methods_are_bound_to_an_object(self): obj = Class() self.assertEqual(__, obj.method.im_self == obj)
call() 函数会在绑定实例的时候调用
Hierarchy:
def test_left_hand_side_inheritance_tends_to_be_higher_priority(self): jeff = self.Spiderpig() self.assertEqual("pink", jeff.color())
加入上面有的各个class 方法有重合的 该使用哪个呢?
MRO = Method Resolution Order
每一个class 都有一个 MRO 属性.里面存放的各个类的顺序即为各个方法的优先级
例如上面图所示的模型中
如下所示告诉我们 实例与类的 属性是不同的..
注意 可以 share 也可以不 share?
当 catcher = self.MinimalCatcher() catcher.my_method() 不会调用 getattr
只有调用的方法没有时才会调用getattr ??
记录删除 的属性名称.. 不过这个真心不常用呀...