-
s[0].upper() 变大写 s[1:].lower() 变小写 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
查看全部 -
def add(x,y,f):
return f(x)+f(y)
add(-5,9,abs)
->14
查看全部 -
匿名函数 lambda x: x * x 实际上就是:
def f(x): return x * x 关键字lambda 匿名函数有个限制,就是 返回函数的时候,也可以返回匿名函数: 注:python2.7中,cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 但是,python3.7中 cmp()已经不存在了,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象 >>> import operator >>> operator.eq('hello', 'name'); False >>> operator.eq('hello', 'hello'); True
查看全部 -
def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum 注意:
像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。
闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
考察下面的函数 f:
def f(j): def g(): return j*j return g
它可以正确地返回一个闭包g,g所引用的变量j不是循环变量,因此将正常执行。
在count函数的循环内部,如果借助f函数,就可以避免引用循环变量i。
查看全部 -
#_*_coding:UTF-8_*_
def format_name(s):
a = s[:1].upper()
b = s[1:].lower()
c = a+b
return c
print map(format_name, ['adam', 'LISA', 'barT'])
#这里map函数的第二个参数表示的是分别传入3个字符串到format_name函数里。
#而不是将list=['adam', 'LISA', 'barT']传入format_name
#所以结果是调用3次format_name函数,并且参数分别是'adam', 'LISA', 'barT'
查看全部 -
Rational类虽然可以做加法,但无法做减法、乘方和除法,请继续完善Rational类,实现四则运算。
提示:
减法运算:__sub__
乘法运算:__mul__
除法运算:__div__如果运算结果是 6/8,在显示的时候需要归约到最简形式3/4。
参考代码:
def gcd(a, b): if b == 0: return a return gcd(b, a % b) class Rational(object): def __init__(self, p, q): self.p = p self.q = q def __add__(self, r): return Rational(self.p * r.q + self.q * r.p, self.q * r.q) def __sub__(self, r): return Rational(self.p * r.q - self.q * r.p, self.q * r.q) def __mul__(self, r): return Rational(self.p * r.p, self.q * r.q) def __div__(self, r): return Rational(self.p * r.q, self.q * r.p) def __str__(self): g = gcd(self.p, self.q) return '%s/%s' % (self.p / g, self.q / g) __repr__ = __str__ r1 = Rational(1, 2) r2 = Rational(1, 4) print r1 + r2 print r1 - r2 print r1 * r2 print r1 / r2
查看全部 -
斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。
请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。
需要根据num计算出斐波那契数列的前N个元素。
参考代码:
class Fib(object): def __init__(self, num): a, b, L = 0, 1, [] for n in range(num): L.append(a) a, b = b, a + b self.numbers = L def __str__(self): return str(self.numbers) __repr__ = __str__ def __len__(self): return len(self.numbers) f = Fib(10) print f print len(f)
查看全部 -
已有定义:
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score def whoAmI(self): return 'I am a Student, my name is %s' % self.name
则:
>>> dir(s) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'gender', 'name', 'score', 'whoAmI']
如何去掉`__xxx__`这类的特殊属性,只保留我们自己定义的属性?
>>>filter(lambda x: not(x[0] == '_'), dir(s) ) ['gender', 'name', 'score', 'whoAmI']
查看全部 -
由于属性可以是普通的值对象,如 str,int 等,也可以是方法,还可以是函数,大家看看下面代码的运行结果,请想一想 p1.get_grade 为什么是函数而不是方法:
class Person(object): def __init__(self, name, score): self.name = name self.score = score self.get_grade = lambda: 'A' p1 = Person('Bob', 90) print p1.get_grade print p1.get_grade()
直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self。
查看全部 -
请给 Person 类添加一个类属性 count,每创建一个实例,count 属性就加 1,这样就可以统计出一共创建了多少个 Person 的实例。
由于创建实例必定会调用__init__()方法,所以在这里修改类属性 count 很合适。
参考代码:
class Person(object): count = 0 def __init__(self, name): Person.count = Person.count + 1 self.name = name p1 = Person('Bob') print Person.count# => 1p2 = Person('Alice') print Person.count# => 2p3 = Person('Tim') print Person.count# => 3
查看全部 -
请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。
要定义关键字参数,使用 **kw;
除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
参考代码:
class Person(object): def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = birth for k, v in kw.iteritems(): setattr(self, k, v) xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student') print xiaoming.name print xiaoming.job
查看全部 -
Mark.
查看全部 -
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
查看全部 -
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
查看全部 -
reduce()对list的每个元素反复调用函数f,并返回最终结果值。
查看全部
举报