>>> x = {"name":"qiwsir", "lang":["python", "java", "c"]}
>>> y = x.copy()
>>> y
{'lang': ['python', 'java', 'c'], 'name': 'qiwsir'}
>>> id(x)
3072241012L
>>> id(y)
3072241284L
>>> y["lang"].remove("c")
Python中,用a=b的方式复制是假拷贝,仅仅是同一个东西,贴上了两个不同的标签(a,b)。用a=b.copy() 是拷贝了,但是,如果b是元组,其中有list,则list仍然会被假拷贝,也就是仅仅有一个通路,通向原来的list,而没有实现真正的拷贝。要实现完全的拷贝,需要import copy 然后 a= copy.deepcopy(b)
关于递归的解释:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事。故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事。故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事。故事是什么呢?……””。这就是递归。可以理解为函数内部调用函数本身。
python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数:
filter、map、reduce、lambda、yield
>>> new_numbers = [ i+3 for i in numbers ]
>>> new_numbers
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
这种列表解析的方式是非常非常好的。
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #把列表中每一项都加3
>>> map(add,numbers) #add(x)是上面讲述的那个函数,但是这里只引用函数名称即可
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> lst1 = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,0]
>>> map(lambda x,y: x+y, lst1,lst2) #将两个列表中的对应项加起来,并返回一个结果列表
[7, 9, 11, 13, 5]
>>> reduce(lambda x,y: x+y,[1,2,3,4,5])
15
这里reduce是这么被执行了的,1+2+3+4+5=15
>>> a
[3, 9, 8, 5, 2]
>>> b
[1, 4, 9, 2, 6]
>>> zip(a,b) #复习一下zip,下面的方法中要用到
[(3, 1), (9, 4), (8, 9), (5, 2), (2, 6)]
什么是类?就我目前的理解,类是一个格式加工厂,类里面可以有很多函数,这些函数就像工厂里的机器一样。每个函数在定义时第一个参数都是self,这个参数是类实例化对象的代表,或者说就是实例化的对象。比如person是一个类( class),a= person(),这样一来,person这个类下的函数,比如有这样一个函数,def name( self, size):函数要对外来的对象a进行加工,而程序员编程时又不可能提前知道这个外来的对象,就必须用一个统一的东西去代替它。就用self去代替。这个和函数的参数是相似的。我是自学Python没人指导,没有看到Python学习手册后面的内容,导致这里的学习出现了停顿。
类里面有特定的函数,比如__init__,这个函数可以为对象赋予属性。其他我们自己定义的函数貌似不行。
类不是一旦调用就执行它的所有方法(函数),而是只执行初始化函数( init),其他函数需要调用。
class person:
def __init__(self, name)
self.name= name #这里设置了一个属性其值为传入的__init__的第二个值,为了方便直接用self.name,当然也可以写成self.xx
self.email="121058" #这里的email属性不是从外部传入的,而是函数内部定义好的。
def getname()
girl = Person('canglaoshi')
name = girl.getName() #这里函数中并无第二个参数,因此无需传值。第一个参数是self
网友评论