zoukankan      html  css  js  c++  java
  • python基础和注意点概要

    1. 只有在形参表末尾的那些参数可以有默认参数值
    例如,def func(a, b=1) 是有效的,但是 def func(a=1, b) 是无效的。

    2. 默认参数的值是不可变的对象,比如None、True、False、数字或字符串
    例如;def print_info( a , b = [] ): 就是错误的

    参考:https://www.jianshu.com/p/e579ba82be99 第10条

    3. 回调函数
    定义:
    一般情况下,应用程序会时常通过API调用库里所预先备好的函数。但是有些库函数却要求应用先传给它一个函数,
    好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数。

    打个比方:
    有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,
    睡得死怕耽误事的,还可以要求往自己头上浇盆水。
    “叫醒”这个行为是旅馆提供的,相当于库函数,
    “叫醒的方式”是由旅客决定并告诉旅馆的,也就是回调函数;
    而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数。

    实例:
    http://blog.csdn.net/tchenjx/article/details/51661173

    4. 所有的变量都可以理解是内存中一个对象的“引用”
    可变对象一旦创建之后还可改变但是地址不会发生改变,即该变量指向的还是原来的对象,不可变对象相反
    strings, tuples, 和numbers是不可更改的对象,而 list, dict, set 等则是可以修改的对象

    值传递:将参数a的值作为参数传递进去,程序运行完a的值不改变
    引用传递:将参数a的地址传递进去,程序运行完a的值随之改变

    python不允许程序员选择传值还是传引用,
    如果函数接受的是一个不可变对象,则为值传递;
    如果函数接受的是一个可变对象,则为引用传递。

    5.匿名函数
    lambda x,y: x+y
    filter(lambda x:x>3,[1,2,3,4,5])

    6.反转字符串 text="abcdef"
    1)text[::-1]
    2)转换成list,用其reverse函数, a.reverse()

    3)sorted(a,reverse=True)

    4)list(reversed(a))

    [:end:]和range(,end,) 都是输出到end-1,比如:
    text="abcdef"
    print text[:5] #abcde

    7.内置函数 zip

    a = [1,2,3]
    b = [4,5,6]
    zipped = zip(a,b) # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]
    zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式[(1, 2, 3), (4, 5, 6)]


    8.函数调用问题(下面代码会输出什么)
    https://www.cnblogs.com/zhangqigao/p/6397853.html 问题6
    第3次是建立在第1次函数调用的基础上,l = [0,1]

    9. 实例方法/类方法/静态方法

    10. yield
    iterables -> generators -> yield

    列表推导式: mylist = [x*x for x in range(3)]

    生成器也是迭代器的一种,但是你只能迭代它们一次.
    原因很简单,因为它们不是全部存在内存里,它们只在要调用的时候在内存里生成
    mygenerator = (x*x for x in range(3))
    生成器和迭代器的区别就是用()代替[],还有你不能用for i in mygenerator第二次调用生成器

    Yield的用法和关键字return差不多,会返回一个生成器
    Yield你必须先理解当你调用函数的时候,函数里的代码并没有运行.函数仅仅返回生成器对象
    每当for语句迭代生成器的时候你的代码才会运转


    11. 当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。
    http://blog.csdn.net/chenjinyu_tang/article/details/8136841

    12. 浅拷贝和深拷贝
    直接赋值:传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变
    浅拷贝:子对象没有拷贝,所以原始数据改变,子对象会改变
    深拷贝:全部拷贝,原始数据怎么变也不会导致拷贝后的元素改变

    13.使用for从序列中得到的每一个对象,事实上都是从原序列中复制了一份。
    因此对此对象进行处理时,只是处理了复制体,并没有影响到原序列

    14.装饰器:为已经存在的函数或对象添加额外的功能

    1)

    def debug(func):
        def wrapper(*args, **kwargs):  # 指定宇宙无敌参数
            print "[DEBUG]: enter {}()".format(func.__name__)
            print 'Prepare and say...',
            return func(*args, **kwargs)
        return wrapper  # 返回
    
    @debug
    def say(something):
        print "hello {}!".format(something)
    

    2)@classmethod, @staticmethod和@property

    classmethod(fn)表明函数fn是类的函数而非类实例的函数;

    staticmethod(fn)表明函数fn是类的静态方法,
    即类的静态成员属于类本身,不属于类的实例,它无法访问实例的属性(数据成员或成员函数);

    property([fget[, fset[, fdel[, doc]]]])决定外部调用者对new-style类的某些属性是否具有读/写/删除权限;

    参考:
    https://www.cnblogs.com/cicaday/p/python-decorator.html
    http://blog.csdn.net/slvher/article/details/42497781

    15. 新式类/旧式类
    1)区别
    多继承时,新式类是广度优先(C3算法),旧式类是深度优先
    新式类,基类继承自object类 class xxx(object)

    Python 2.x中默认都是经典类,只有显式继承了object才是新式类
    python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

    2)C3算法
    class A(O):pass
    class B(O):pass
    class C(A,B):pass
    顺序:C A B O

    3)例子

    class A():
        def __init__(self):
            pass
        def save(self):
            print "This is from A"
    class B(A):
        def __init__(self):
            pass
    class C(A):
        def __init__(self):
            pass
        def save(self):
            print  "This is from C"
    class D(B,C):
        def __init__(self):
            pass
    fun =  D()
    fun.save()
    
    经典类的答案: This is from A
    新式类的答案: This is from C

    参考:
    https://www.cnblogs.com/wanghaoyang/p/6090110.html

  • 相关阅读:
    ES进阶--01
    JVM--02
    JVM--01
    ES--08
    ES--07
    ES--06
    python实现当前主机ip 主机名称的获取
    djang中的blank=True 和null = True的区别
    python中yield的用法详解
    python 编写古诗赤壁赋
  • 原文地址:https://www.cnblogs.com/stellar/p/8484930.html
Copyright © 2011-2022 走看看