python复习

本博文中含有来源多处的总结,没有能够将所有的来源引用

python中删除list中的元素方法:remove,pop,del

str=[1,77,8,0]

remove:按值删除

str.remove(8)

pop:按索引删除,会返回被删除的元素

str.pop(2)

del:按索引删除,还可以删除指定范围内的值

del str[2]

del str[1:3]

python中list赋值

a=[23,242,9,0]
b=a#a和b共享一块内存
a[1]=87
print(a)
print(b)
#[23, 87, 9, 0]
#[23, 87, 9, 0]

1) @classmethod

用classmethod修饰表示这是一个类方法,如果没有用@classmethod修饰,则表示这是一个对象方法,使用时必须与一个对象绑定,如下

class MyClass():
    def thisIsClassMethod(self):
        print "this is a class method"

if __name__ == "__main__":
    c = MyClass()
    MyClass.thisIsClassMethod(c) #调用时传入参数c,否则编译错误

如果采用@classmethod修饰,则不用传入参数c,可以用下面方式调用:

class MyClass():
    @classmethod
    def thisIsClassMethod(cls,parameter):
        print "this is a class method"
        print cls.__name__
        print type(cls) #打印类型为classobj


if __name__ == "__main__":
    MyClass.thisIsClassMethod(None) #不用与对象绑定
    print type(MyClass)

2) property修饰符

被property修饰符修饰的方法可以像属性一样被访问,如
 
class MyClass:
    def __init__(self,num):
        self._Num = num
    @property
    def Num(self):
        return self._Num

if __name__ == "__main__":
    c = MyClass(100)
    print c.Num   #注意,这里的访问形式看起来像是访问一个属性,但其实是一个方法

3) staticmethod修饰符

被staticmethod修饰符的表示这是一个类的静态方法,可以被类直接调用,与@classmethod的区别在于classmethod对应的方法的第一个参数为cls,为类的类型,而staticmethod不是
如下:
class MyClass:
    @staticmethod
    def thisIsStaticMethod():
        print "This is static method"

if __name__ == "__main__":
    MyClass.thisIsStaticMethod()

1、input和raw_input的区别

   input假设输入的都是合法的python表达式,如输入字符串时候,要加上引号,而raw_input都会将所有的输入作为原始数据

2、原始字符串前面加上r,eg str=r"C:download java.txt",其中的转移字符 就不会被看成是换行符

第二章 列表和元组

1、列表左边index从0开始,右边从-1开始

2、分片取左不取右,如nums[3:6],取3、4、5

3、步长,nums[0:10:2],每次走2步,或者[8:3:-2]

4、[42]*10    会生成[42,42,42....42]

5、删除元素

   names=['hello','betch','cecil','fafda']

 del names[2]就会删除'cecil'元素

6、插入元素

   nums=[1,5]

   nums[1:1]=[2,3,4]

 nums[1,2,3,4,5]

7、append

   插入一个元素:

   lst=[1,2,3]

   lst.append(4)

   lst变成[1,2,3,4]

8、count

    lst=['who','who','or','fada']

    lst.count('who')

   

1、构造函数是私有的,为什么就不能创建实例

私有函数限制在类的范围内,当然不能创建,new一个实例啦

 

2、map和hash_map

存储结构:map是红黑树,hash_map是hash

构造函数:map只需要比较函数,hash_map需要hash函数

 

3、c++11的特性

a)auto关键字

b)lambda表达式

c)变长参数的模版,如:auto p = make_pair(1, "C++ 11");

auto t2 = make_tuple(1, 2.0, "C++ 11", {1, 0, 2}); 

 Print(1, 1.0, "C++11");

 

4、python闭包

def func(name):

    def inner_func(age):

        print 'name:', name, 'age:', age

    return inner_func

 

bb = func('the5fire')
bb(26)  # >>> name: the5fire age: 26
一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量

 

 

5、python闭包和装饰器

python中的闭包

def func(name):
    def inner_func(age):
        print 'name:', name, 'age:', age
    return inner_func
bb = func('the5fire')
bb(26)  # >>> name: the5fire age: 26
一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量。

 

装饰器的存在主要是为了不修改原函数的代码,也不修改其他调用这个函数的代码,就能实现功能的拓展。

 

 在写代码时,一般不会轻易对已经实现的类或函数进行修改。为了扩充函数功能,可以使用修饰器。

def w1(func):
def inner(a,b):
print("两个数之积:",a*b)
func(a,b)
return inner

@w1
def f1(a,b):
print("两个数之和",a+b)

f1(3,4)
结果如下:
两数之积: 12
两数之和: 7

 python解释器就会从上到下解释代码,步骤如下:
1.def w1(func): ==>将w1函数加载到内存
2.@w1

执行w1函数 ,并将 @w1 下面的函数作为w1函数的参数,即:@w1 等价于 w1(f1) 所以,内部就会去执行。将执行完的w1函数返回值 赋值 给@w1下面的函数的函数名f1,即将w1的返回值再重新赋值给 f1。些时的f1函数已经不是表面上看到的函数,而是增加了inner函数中的内容,函数功能得到了扩充。
原文地址:https://www.cnblogs.com/wuxiangli/p/5649283.html