跳至主要内容

python3语法基础之函数和类

http://ift.tt/2xXd9ze

函数

  1. 什么是函数?
    1. 函数就是一些封装在一起,能够实现某种功能的代码段
  2. 函数的定义
    1. 在python中,函数通过def关键字定义
    2. 定义的格式如下:

def 函数名(参数):

函数体

  1. 实参和形参
    1. 形参
      1. 函数定义的时候,写在参数列表中的变量名
    2. 实参
      1. 调用函数的时候,往函数里传递的数据
  2. 关于return
    1. 执行return语句的时候,肯定会从当前函数退出
    2. return 可以返回值
    3. 如果没有写return ,python中默认 return None
  3. 局部变量和全局变量
    1. 在函数内或者类内定义的变量叫做局部变量,作用域只在函数或类内
    2. 定义在文件中,任何敌方都能访问到的叫全局变量
    3. 可以使用global 关键字把局部变量声明为全局变量
  4. 默认参数
    1. python支持默认参数,也是从右向左赋值

 
 

defTestFun(nNumA=10,nNumB=20):

print(nNumA,nNumB)

 
 

if__name__=="__main__":

TestFun();

TestFun(5,1)

 
 

  1. 关键字参数
    1. 就是可以不按照顺序参数

      defTestFun(nNumA,nNumB):

      print(nNumA,nNumB)

       
       

      if__name__=="__main__":

      TestFun(nNumB=5,nNumA=6)

  2. 变参
    1. python中是通过* 来实现边长参数的

      defTestFun(nNumA,*args):

      print(nNumA)

      print(args)

       
       

      if__name__=="__main__":

      TestFun(1,2,3,4,5,6)

      1. 边长的参数默认是一个元组

 
 

类

  • 为什么会有面向对象理念?
    • 因为所有的程序都追去的是高内聚,低耦合
    • 所谓高内聚低耦合就是指:
      • 自己做自己的事
      • 不过多的依赖外部的数据和代码
  • 面向对象的特点是什么?
    • 封装,继承,多态
      • 什么是封装?
        • 隐藏数据,封装方法
      • 什么是继承?
        • 有部分或全部的数据和方法可以通用,可以通过继承的方式来减少代码的书写量
      • 什么是多态
        • 对于一种指令,不同的对象有不同的反应
  • 类的定义
    • 类的定义:class 类名(继承自谁):

      classTestClass(object):

      nCount=0

      def __init__(self,nNumA,nNumB):

      self.id=nNumA

      self.age=nNumB

       
       

      def PrintALlNum(self):

      print(self.id,self.age)

       
       

      @classmethod

      def PrintCount(cls):

      print(cls.nCount)

       
       

      @staticmethod

      def PrintWhatEver():

      print(TestClass.nCount)

       
       

      if __name__=="__main__":

      test=TestClass(1,18)

      test.PrintALlNum()

      test.PrintCount()

      test.PrintWhatEver()

      • 注:如果没有父类,默认的父类就是object
      • python中所有的类,追寻到最后,都是继承自object
      • python的构造函数是__init__()
      • 成员函数的第一参数恒为self,这相当于c++中的this指针
        • 不需要给这个self传参
        • 只是需要显式的显示出来
    • 类中的数据
      • 类数据属性
        • 跟c++中的const 成员类似,不属于任何一个对象,只属于类
          • 定义方式类似与上面的nCount
      • 实例数据属性
        • python中把对象叫做实例
        • 实例数据属性需要加self
        • 对象可以在任何敌方加实例数据
          • 只是添加的时候构造函数会被自动调用,所有一般在构造函数中添加数据成员
    • 类中的方法
      • 实例方法(普通成员方法)
        • 参数列表中恒有self
      • 类方法
        • 使用@classmethod修饰符修饰,通过cls访问类的相关属性
      • 静态方法:
        • 跟类方法几乎没有区别,但是如果调用类数据成员的时候,建议使用类方法
  • 继承
    • 类中的继承
      • 继承自多个类,在括号中依次写多个类名即可
      • 如果继承的多个类中,有同名的函数,那么只调用最先继承的那个类的函数
        • 也就是说出现了二义性,先找到谁就算谁的
      • 但是假如你就想使用父类中的同名函数,可以使用super方法来调用

        classHuman(object):

        def__init__(self,name,age):

        self.name=name

        self.age=age

        deffun(self):

        print("我是父类")

         
         

        classStudent(Human):

        def__init__(self,id,name,age):

        super(Student,self).__init__(name,age)#父类的构造需要在子类构造中调用,否则父类的属性不会被创建出来。

        self.id=id

         
         

        deffun(self):

        super(Student,self).fun()

        print("我是子类")

         
         

        xiaoming=Student("xiaoming",20,12)

        print(xiaoming.age)

        xiaoming.fun()

         
         

      • super第一参数是本类,它会根据传入的类名去找父类
      • 第二个参数是对象自己,可以理解为this指针,python中就是self
      • 然后调用父类中的方法即可
  • 类中的权限控制
    • python中的权限控制非常的弱。没有可以完全限制不能访问的情况,只能靠人的自觉

      classCStudent(object):

      def __init__(self,name):

      self.__name=name#一个变量前面加上两个下划线,就不能被外部访问了

      #但是呢,这只是一个假象

      self._age=10#单下划线开头的成员,按照约定俗成的规则,也是私有的,不应该被在外部访问。但是还是可以访问到

      def printName(self):

      print(self.__name)

       
       

       
       

      xiaoming=CStudent("xiaoming")

      xiaoming._age=20

      print(xiaoming._age)

      #print(xiaoming.__name)

      xiaoming._CStudent__name="xiaohong"#还是能修改__name的值

      xiaoming.printName()

  • 类中的一些属性
    • 类中有一些自有的属性,不需要自己定义的

类属性

含义

__name__

类的名字(字符串)

__doc__

类的文档字符串

__bases__

类的所有父类组成的元组

__dict__

类的属性组成的字典

__module__

类所属的模块

__class__

类对象的类型

 
 

  • python中的多态
    • python中的多态有实现有点特别,改天再写

The post python3语法基础之函数和类 appeared first on cole.

http://ift.tt/eA8V8J Python September 12, 2017 at 08:16PM

评论

此博客中的热门博文

RS232 学习笔记

https://ift.tt/2zh0MU7 什么是RS232 RS232的传输方式 RS232的分类 数据终端设备:DTE(Data Terminal Equipment) 数据通信设备:DCE:Data Communication Equipment 常见的管脚接口和脚位的意义 发展 RJ-45接口和DB-9 Console 及DB-9 Modem接口的对应关系 9针串口 各脚位的意义 常见的串口设置 波特率(Bps) 数据位(Data Bits) 奇偶校验(Parity) 停止位(Stop Bits) 流量控制 什么是RS232 RS232 是 美国电子工业联盟 指定的串行通信的接口标准。 原始编号全称是EIA-RS-232(简称232,RS232)。他被广泛用于计算机串行接口外设连接。 RS232 标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业联盟,RS(Rrcommand Standard)代表推荐标准,232是标识号,C代表232的第三次修改。 RS232的传输方式 在rs232标准中,字符是以一串行的比特串来一个接一个断点以串列(serial)的方式传输的(所以又叫串口)。 优点 传输线少,配线简单,发送距离可以较远 最常见的编码格式是异步起停( Asynchronous Start-stop )格式,它使用一个起始比特后面紧跟7个或8个数据比特(bit),然后是奇偶校验比特,最后是一个或两个停止比特。所以发送一个字符至少需要10比特,带来的效果是使全部的传输速率,发送信号的速率以10划分。 一个最平常的代替异步起停的方式是使用高级数据链路控制协议(HDLC)。 RS232在设计之初就是用来连接调制解调器做传输之用的,也因此它的脚位意义通常和调制解调器传输有关。 RS232的分类 根据不同的线路用来发送和接受信号的不同,妇女为 数据终端设备:DTE(Data Terminal Equipment) 计算和终端设备有DTE连接器 数据通信设备:DCE:Data Communication Equipment 调制解调器和打印机有DCE连接器 不是很准确, 但是可以大概分为这两类 常见的管脚接口和脚位的意义 发展 RS232...

32位ARM汇编语言(四)数据处理指令

http://ift.tt/2Gwa4v5 基本指令介绍 数据传送指令 比较指令 cmp{条件}操作数1,操作数2 CMN{条件}操作数1,操作数2 TST{条件},操作数1,操作数2 TEQ{条件} 操作数1,操作数2 算数逻辑运算指令 ADD{条件}{S}目的寄存器,操作数1,操作数2 ADC{条件}{S}目的寄存器,操作数1,操作数2 RSB{条件}{S}目的寄存器,操作数1,操作数2 RSC{条件}{S}目的寄存器,操作数1,操作数2 AND{条件}{S}目的寄存器,操作数1,操作数2 EOR{条件}{S}目的寄存器,操作数1,操作数2 BIC{条件}{S}目的寄存器,操作数1,操作数2 基本指令介绍 数据传送指令 数据传送指令用于在寄存器和储存器中之间进行数据的双向传输 比如:MOV ,MVN 算数逻辑运算指令 完成常用的算术与逻辑运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中相应条件表示位 比如:ADD,ADC,SUB,SBC,RSB,RSC,AND,ORR,EOR,BIC 比较指令 不保存运算结果,只更新CPSR中相应的条件标志位 比如:CMP,CMN,TST,TEQ 数据传送指令 指令 描述 MOV{条件}{S}目的寄存器,操作数 数据传送指令 MVN{条件}{S}目的寄存器,操作数 数据取反传送指令 {S}选项决定指令的操作是否影响CPSR中条件标志位的值 MVN与MOV不同之处是在传送之前按位被取反 __asm__ ("mov ri,r0“); //将寄存器R0的值传送到寄存器R1 __asm__(”mov r1,r0,lsl#3"); //将寄存器R0的值左移3位后传到R1 __asm__(“mov pc,lr"); //将寄存器lr的值传送到pc,常用于子程序返回 __asm__("mvn r0,#0”); // 将立即数0 取反传送到寄存器R0中,完成后R0=-1 比较指令 指令 描述 CMP{条件}操作数1,操作数2 比较指令 CMN{条件}操作数1,操作数2 比较反值指令 TST{条件...

32位ARM汇编语言(二)ARM 汇编语言特点

http://ift.tt/2FpIH4w 两种不同风格的ARM指令 特点1:LDR/STR结构 特点2:8中寻址方式 特点3:指令后缀 特点4:条件执行后缀 特点5:多级指令流水线 两种不同风格的ARM指令 ARM 官方的ARM汇编指令:指令一般用大写,Windows中IDE开发环境常用,如 LDR RO,[R1] GNU风格的ARM汇编:指令一般用小写字母,linux中常用,如: ldr r0,[r1] 特点1:LDR/STR结构 ARM 采用RISC(Reduced Instruction Set Computer 中文:精简指令计算机)结构,cpu本身不能直接读取内存,需要先将内存中的内容加载到cpu中的通用寄存器中,而后才能被cpu处理 ldr(load register)指令将内存内容加载入通用寄存器 str(store register)指令将寄存器内容存入内存空间中 ldr/str组合用来实现ARM cpu和内存的数据交互 特点2:8中寻址方式 寻址方式 示例 寄存器寻址 mov r1,r2 立即寻址 mov r0,#0xff00 寄存器移位寻址 mov r0,r1,lsl#3 寄存器间接寻址 ldr r1,[r2] 基址变址寻址 ldr r1,[r2,#4] 多寄存器寻址 ldmia r1!,{r2-r7,r12} 堆栈寻址 stmfd sp!,{r2-r7,lr} 相对寻址 beq sign 特点3:指令后缀 虽然ARM的汇编指令不是很多,但是通常可以在指令后面跟上后缀,变成不同的指令,常用的指令有: 常用指令后缀 解释 B(byte) 功能不变,操作长度变为8位 H(half word) 功能不变,长度变为16位 S(signed) 功能不变,操作数变为有符号(如ldrsh,ldrsb) S(S标志) 功能不练,影响CPSR标志位,如(mov 和movs,movs r0,#0) 特点4:条件执行后缀 条件码 助记符 助记符全拼 说明 检测条件 0000 EQ equal 等于0 Z=1 0001 NE not equal...