-
import types class Person(object): def __init__(self, name, score): self.name = name self.score = score def fn_get_grade(self): if self.score >= 80: return 'A' if self.score >= 60: return 'B' return 'C' p1 = Person('Bob', 90) print (p1.fn_get_grade())
查看全部 -
p1.get_grade 返回的是一个函数对象,这个函数是一个绑定到实例的函数
p1.get_grade() 才是方法调用
实例方法也是属性,可以动态地添加到实例上,只需用types.MethodType() 把一个函数变为一个方法
查看全部 -
title()将首字母转为大写,非首字母转为小写,如果字符串中没有需要转换的字符则原封不动的返回,生成新的字符串,不改变原字符; Lower() Upper()查看全部
-
filter()函数是Python 内置的另一个有用的高阶函数, filter()函数接收一个函数f 和 一个list, 这个函数f 的作用是对每个元素进行判断, 返回Ture 或 False, filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list.
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
def is_sqr(x):
r = int(math.sqrt(x))
return r*r ==x
print filter(is_sqr, range(1, 101))
查看全部 -
reduce()函数也是Python内置的一个高阶函数, reduce()函数接收的参数和map()函数, 一个函数f, 一个list, 但行为和map()不同, reduce()传入函数f 必须接收两个参数, reduce()对 list的每个元素反复调用函数f, 并返回最终结果
def prod(x, y):
return x * y
print reduce(prod,[2, 4, 5, 7, 12])
educe()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100) 结果将变为125,因为第一轮计算是: 计算初始值和第一个元素:f(100, 1),结果为101。
查看全部 -
map()是Python 内置的高阶函数, 它接一个函数f 和 一个list, 并通过把函数f 依次作用在list的每个元素上, 得到一个新的list并返回
def name(s):
return s[0].upper() + s[1:].lower() #x.spper(),转换大写, x.lower()转换小写
print map(name,['adam','LISA','barT'])
查看全部 -
定义实例方法:
实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的。get_name(self) 就是一个实例方法,它的第一个参数是self。__init__(self, name)其实也可看做是一个特殊的实例方法。
调用实例方法必须在实例上调用
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name
实例方法内部,可访问所有实例属性
外部访问私有属性,可以通过方法调用获得
查看全部 -
def cmp_ignore_case(s1, s2):
n1 = s1.upper()
n2 = s2.upper()
if n1 < n2:
return -1
if n1 > n2:
return 1
else:
return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
查看全部 -
类属性、实例属性
当实例属性和类属性重名时,实例属性优先级高
在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
类属性count改为__count,外部无法访问,内部可以访问
例:
class Person(object):
__count = 0
def __init__(self, name):
self.name = name
Person.__count = Person.__count + 1
print Person.__count #内部可访问
p1 = Person('Bob')
p2 = Person('Alice')
print Person.__count #外部不可访问
查看全部 -
创建类属性
类是模板,而实例则是根据类创建的对象。
实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
类属性可动态添加和修改
class Person(object):
count = 0
def __init__(self,name):
Person.count = Person.count + 1
self.name = name
p1 = Person('Bob')
print Person.count
p2 = Person('Alice')
print Person.count
查看全部 -
添加属性可以 **kw ,也可以用__slots__
查看全部 -
Rational(object) __init__(self,p,q) 表示p/q,前边分子后边分母,答案里多加了个找最大公约数的函数
查看全部 -
Rational(object) 表示有理数,就是表示成分数了
查看全部 -
class Person(object):
__count = 0
def __init__(self, name):
self.name=name
Person.__count=Person.__count+1
@classmethod
def how_many(cls):
return cls.__count
print Person.how_many()
p1 = Person('Bob')
print Person.how_many()可以通过@classmethod把实例方法转成类方法
查看全部 -
import types
def fn_get_grade(self):
if self.score >= 80:
return 'A'
if self.score >= 60:
return 'B'
return 'C'
class Person(object):
def __init__(self, name, score):
self.name = name
self.score = score
p1 = Person('Bob', 90)
p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
print p1.get_grade()
# => A
p2 = Person('Alice', 65)
print p2.get_grade()
# ERROR: AttributeError: 'Person' object has no attribute 'get_grade'
# 因为p2实例并没有绑定get_grade查看全部
举报