• 6、抽象、更加抽象


    抽象(函数)

    创建函数:def 函数名(参数):即可,如需返回值,函数中包含return语句。

    记录函数:如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串。

    若要使用函数修改外部变量值,可以返回值赋予该变量,也可以使用列表传参。

    C/C++中的参数叫做位置参数,Python不仅支持位置参数(它们的位置很重要,比他们的名字更重要),还支持关键字参数。关键字参数可以明确每个参数的作用,使每个参数的含义变得清晰,而且弄错顺序程序也不受影响;另外使用关键字参数在函数中可以给参数提供默认值。

    >>> def hello(greeting='hello',name='houkai'):
        print (greeting,name)

    位置和关键字参数是可以联合使用的,要把位置参数放在前面就可以了。

    收集参数,*参数名表示将所有剩下的参数放在元组中。**参数名可以收集关键字参数放在字典中。

    作用域:globals函数获取全局变量值,locals返回局部变量的字典,vars函数返回含局部变量的所有变量字典。

    如果在函数内声明(如果存在则直接使用)全局变量,使用global标示符。

    递归调用中的经典应用:阶乘和幂

    >>> def factorial(n):
        if n==1:
            return 1
        else:
            return n*factorial(n-1)
    >>> factorial(5)
    120
    >>> def power(x,n):
        if n==0:
            return 1
        else:
            return x*power(x,n-1)
    >>> power(2,3)
    8

    这里的相似之处是n时的结果可以通过n-1时的结果来构建。

    二分查找

    seq=[1,2,3,4,5,6,7,8,9]
    >>> def search(seq,number,lower=0,upper=None):
        if upper is None:upper = len(seq)-1
        if lower == upper:
            assert number == seq[upper]
            return upper
        else:
            middle = (lower+upper)//2
            if number > seq[middle]:
                return search(seq,number,middle+1,upper)
            else:
                return search(seq,number,lower,middle)
    >>> search(seq,4)
    3

    更加抽象(类)

    多态,同样的方法会根据调用对象类型的不同而产生不同行为。

    封装,不同的对象具有独立的空间,相关独立。

    继承,维护程序开发的结构性与简洁。

    类的定义,class name:即可,使用s = name(),创建了对象。

    _xxx不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。

    __xxx双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以

    __xxx___ 定义的是特列方法。像__init__之类的

    类变量紧接在类名后面定义,相当于java和c++的static变量;实例变量在__init__里定义,相当于java和c++的普通变量。

    是否为类的对象,isinstance函数;是否是继承关系,issubclass函数;

    是否含有变量hasattr(x,’name’),是否有函数hasattr(x,’__name__’),所有特性用__dict__特性。

  • 相关阅读:
    chapter4.6生成器
    chapter4.4、递归
    chapter4.3、函数执行流程
    chapter4.2、函数返回值
    直接插入排序
    打印三角型的练习
    杂记
    linux top命令
    makefile 中的 := , += ,?=
    makefile中的shell语法 || Makefile中的@
  • 原文地址:https://www.cnblogs.com/houkai/p/3478779.html
Copyright © 2020-2023  润新知