Python基础知识(一)

目录

一、Python缩进规则

二、Python函数

2.1、函数分类

2.2、函数格式

2.3、参数分类

2.4、函数返回值

2.5、高阶函数

2.6、匿名函数

三、Python类

3.1、类的创建

3.2、对象的创建

3.3、类的属性

3.4、类的方法

3.5、内部类

3.6、魔术方法

3.7、类间关系


一、Python缩进规则

通过使用缩进,来区分不同代码块,在Pycharm IDE中,针对缩进有误的脚本,会直接报错。

在循环嵌套或条件选择语句中,缩进显得尤为重要,因为一旦缩进书写存在问题,就极有可能导致一条执行语句从循环或条件判断中去掉。所以在代码书写过程中,需随时注意缩进规则。

具体规则:

  1. 首行需要顶格,无需缩进
  2. 保证相同层级的代码保持在同一缩进量中
  3. 循环和判断语句中,”:”后面通常要进行缩进,表示进入下一级代码层级。
  4. PEP8 编码规范中明确提出,脚本可用Tab进行缩进,通常标准为4个空格。

二、Python函数

函数是针对一些操作相同,数据引入不同的步骤进行封装而来一种产物。

目的是为了提高代码的重用率,以及后期方便人们对相应代码做优化操作。

2.1、函数分类

  内建函数:

内建函数是指python中已经搭建定义好的函数,开发者可根据自身需要直接进行相关调用。例如print,add等

                 

  自定义函数:

      自定义函数是指通过开发工程师自己构建而来的函数式,通常在调用前会先做该函数具体实现步骤的定义,若工程师本人尚未定义函数便直接引用,则直接报错。           

在开发中,函数我们还可以将其赋给一个变量,例如a = get_num,此时调用为print(a(3)),切记在将函数赋值给变量过程中,不可带括号,在实际调用中直接按照形参去赋值即可

2.2、函数格式

Python语言中,函数是由函数名,参数列表和函数体组成,格式如下:

“””

def 函数名(参数列表):

   函数体

“””       

注意事项:

  1. 就算函数名后不添加任何参数,括号是必须要写的
  2. 可在尚未想好函数具体实现时,先放置一个pass放在函数体上,这样代码便可先成功运行。

2.3、参数分类

在Python函数中,函数定义一共分两类,一类为形式参数,另一类为实际参数

形式参数:

  也成为虚拟变量,实在定会一函数体时使用的参数,目的是用来接收调用该函数实际参数时传入的数据。

实际参数:

实际参数是调用时传递给函数的确切参数,可以是常量、变量、函数等。

函数调用过程中,会经历一个实参复制到形参的过程,首先需要型参与实参的数量一致,另外实参必须要有确定值。例如如下用法:

         

注:如果在调用实际参数过程中是按照add_num(a = 1,b = 2)或add_num(b = 2, a = 1)格式书写,含义与上图一致

按另一个维度划分,参数也可分为可变类型不可变类型,其中可变类型数据结构为列表、字典等,不可变类型为整数、字符串、元组等。如果传递参数为可变类型,则当这些参数在函数内做了修改,则会影响到外部该变量的值,如果传递参数为不可变类型,则函数无论作何调用或修改,都不会影响到外部变量。如图所示

    

上图为不可变类型参数,函数内部重新赋值不会影响外部变量的值。归根到底是因为在调用不可变类型参数时,按传值方式复制了变量a,在b=10时,则新生成一个int值对象10,并让b指向刚才a赋值的内存地址上。  

上图为可变类型参数,函数内部重新赋值会影响外部变量的值,归根到底是因为在调用可变类型参数时,调用过程中引用对象用的是同一个内存地址,所以会根据变化而变化。

当然,除这两种笼统的分类外,参数类型还可以分成几种类型:

位置参数:调用函数过程中,基于形参的顺序去书写对应的实参,此为位置参数。

默认参数:调用函数过程中,在形式参数中写明实际参数值的参数为默认参数。设置默认参数时,必选参数在前,默认参数在后

不定长参数:函数在调用过程中,形参为列表或字典,此时可根据函数内部实现功能,赋所需数量实参进行处理,此时*num,**kwargs便为不定长参数。

命名关键字参数:如果要限制关键字参数的名字,可以用命名关键字参数。用”*”来做区分,“*”后面的参数均需要在实参引入时按照关键字参数导入命名规范去写,否则算报错

2.4、函数返回值

函数返回值的含义为当函数执行完毕后,根据后续return 的值,返回给外部调用者。函数返回值不一定必须要有一个固定的值,也可以返回None,当一个函数最后没有书写return X时,默认均为return none

如下图所示为有返回值的函数书写方式:

   此为返回值为none时的函数书写方式:

注:返回值和所接收的变量之间需要一一对应,且需要按照顺序去对应

2.5、高阶函数

 定义:将函数作为参数进行输入,并得到最终输出的函数被称为高阶函数

2.6、匿名函数

 在python中经常通过lambda创建匿名函数,该函数体相较def函数体更加简洁,语法如下图所示:      

(注:在函数书写过程中,需要遵循PEP 书写规范,比如逗号、冒号后加空格,均前不加空格;切片中冒号前后均不加空格;#后加一个空格,二元运算符前后均加一个空格)

三、Python类

定义:类是创建对象的模板,对象是类的实例化,所以类的概念在面向对象编程思想中尤其重要。举个例子:类如果代表动物的话,对象就代表”猫、狗、老鼠”等。

3.1、类的创建

  Python语言中我们通过class关键字来创建类,其中class是关键字,ClassName是类名,bases是要继承的父类,class_A是类成员,包含属性、方法等。ClassName在实际命名时首字母大写。

 注意事项:

1、如果类在构造过程中没有显示指明继承的父类,则默认继承object类

2、当python中子类继承父类时,子类不需要重写构造函数__init__,会自动调用父类的__init__。    

3、如果重写了子类的__init__,实例化子类过程中就不会再调用父类的__init__

 4、如果重写了__init__,还需要继承父类的方法,使用关键字super(此时getName也进行了方法重写)

3.2、对象的创建

创建完类后,便可以根据类创建对应的对象,此步骤也被称之为类的实例化,创建好一个类后,包含类名、属性和方法三个元素,这三个方面共同可构建实例化对象。A = Aminal(“猴子”,”10KG”)此时A就是类A的一个实例化对象

3.3、类的属性

属性可细分为两种级别,类级别实例级别两种。

两者之间存在联系,在对象实例未作修改前,其属性值与类实例的属性值保持一致,修改后便独立出来,不再与类属性挂钩。书写格式:类.属性 = value(对象.属性 = value)

 类的定义由属性方法组成,属性是对数据的封装,方法则是对类行为的封装。属性按使用范围分为公有属性、私有属性和内置属性

公有属性:可支持类中以及类之外去调用的属性,默认均为该属性

私有属性:不能被类以外的函数调用的属性,命名规则为:__私有属性

内置属性:系统默认添加的属性,命名规则:__内置属性__

3.4、类的方法

类方法包括公有方法、私有方法、类方法和静态方法。接下来我根据这几种分别去做介绍:

公有方法:不能被类直接调用,只能通过实例化对象进行调用

私有方法:不能被外部的类和方法调用,也是需要使用实例化对象调用(命名:def  __私有方法)

类方法:能被类和对象同时调用的方法(被classmethod调用&&通过装饰器@classmethod修饰)

静态方法:可以被类直接调用,也可以被所有实例化对象共享(调用staticmethod方法&&通过装饰器@staticmethod修饰声明)

各方法书写规范如下图所示:

 针对类方法中self的使用说明:

1、self是一种针对用类的实例的一种定义,调用时会自动传入。

2、除静态方法外,初学者建议其余方法都把self写到第一个形参处,此处不需要在实际引用时添加参数。特别强调一点,静态方法调用时格式为”类.参数”

3、静态方法相比较类方法而言,执行效率要高,但同时也更加耗费资源。

3.5、内部类

定义:如字面意思,是在一个类内部去做定义的类,一般情况下不做使用。

做简单了解即可,内部类一共两种调用方法:

1、实例化外部类对象,再通过对象调用内部类

2、直接通过外部类调用内部类

3.6、魔术方法

  定义:在python语言中,所有以双下划线”__”标识的方法均为魔术方法。在实例化类时,这些方法会自动调用。

   __init__()被称为构造函数,是用来初始化类的内部参数的,如果在类中没有书写该方法,则系统默认会给一个__init__()方法

       

3.7、类间关系

关联关系:一个类的属性类型是另外一个类的类型

(一对一、一对多)

依赖关系:实例执行方法时,需要调用另一个类的实例来完成。

 继承关系:存在”is - a”关系,下图定义Person类为父类,从该类中派生出两个子类USA和China。

注意:

           1、子类可通过继承父类来获取父类的属性和方法(私有方法和私有属性无法获取) 

           2、子类可以通过多态性修改自己属性和方法。  

           3、一个父类可由多个子类继承,一个子类也可继承多个父类。

           4、如果父类定义了__init__(),子类也定义了自己的__init__(),此时按照子类所定义的属性去做子类的实例化,如若子类仍需要调用父类的实例化(或子类仅是在父类实例化基础上做扩展),则需在子类构造函数中添加super(子类名称,self).__init__(父类所需调用的形参)。

          5、当继承的多个父类中有相同的属性或方法时,会使用最后一个继承父类的属性或方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值