import math
def add(x,y,f):
return f(x)+f(y)
print add(4,8,math.sqrt)
def add(x,y,f):
return f(x)+f(y)
print add(4,8,math.sqrt)
2015-10-24
之前说的好像还是有所不妥,可以这样理解。
在改动之前,f()函数中,都是直接对变量i做引用。因为i的值一直在变化。所以,最终结果是3个9
改动后,因为嵌套了一层函数调用。在g()中,都是对f(j)的参数j做引用。而因为r = f(i),所以实际结果变为f(1),f(2),f(3)
在改动之前,f()函数中,都是直接对变量i做引用。因为i的值一直在变化。所以,最终结果是3个9
改动后,因为嵌套了一层函数调用。在g()中,都是对f(j)的参数j做引用。而因为r = f(i),所以实际结果变为f(1),f(2),f(3)
2015-10-23
这一节,一开始也没明白。后面买了本Python核心编程看了下,才明白原因。首先,我们需要知道,Python中一切变量皆是对象。所有变量之间,用"="操作符赋值或者是函数之间的参数传递,都是引用,而不是像C和Cpp一样拷贝。
例如 a = 1, b = a。类似C++:
int x = 1
int& a = x; // 在Python中,a = 1,就是对象a对 对象'1'做一个引用。
int& b = a;
当然,不同的是,你还可以a = 3;让a去引用3。而Cpp中,是不能变更引用对象的。
或者这样理解:
int x = 1;
int* a = &x;
int* b = &(*a);
例如 a = 1, b = a。类似C++:
int x = 1
int& a = x; // 在Python中,a = 1,就是对象a对 对象'1'做一个引用。
int& b = a;
当然,不同的是,你还可以a = 3;让a去引用3。而Cpp中,是不能变更引用对象的。
或者这样理解:
int x = 1;
int* a = &x;
int* b = &(*a);
2015-10-23
import functools
sorted_ignore_case = functools.partial(sorted, cmp = lambda x, y: cmp(x.lower(), y.lower()))
print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
sorted_ignore_case = functools.partial(sorted, cmp = lambda x, y: cmp(x.lower(), y.lower()))
print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
2015-10-22
网上查了一下,sort函数原型;L.sort(cmp=None, key=None, reverse=False) . cpy()为内建函数,在python3.X中已经取消用法了,改为可以用key=xx,key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序。这个老师不讲直接做真的跨度很大啊……
2015-10-22
写个简洁的
def calc_prod(lst):
def a():
return reduce((lambda x,y: x*y),lst)
return a
f = calc_prod([1, 2, 3, 4])
print f()
def calc_prod(lst):
def a():
return reduce((lambda x,y: x*y),lst)
return a
f = calc_prod([1, 2, 3, 4])
print f()
2015-10-21