函数
-
什么是函数?
- 函数就是一些封装在一起,能够实现某种功能的代码段
- 函数就是一些封装在一起,能够实现某种功能的代码段
-
函数的定义
- 在python中,函数通过def关键字定义
- 定义的格式如下:
- 在python中,函数通过def关键字定义
def 函数名(参数):
函数体
-
实参和形参
-
形参
- 函数定义的时候,写在参数列表中的变量名
- 函数定义的时候,写在参数列表中的变量名
-
实参
- 调用函数的时候,往函数里传递的数据
- 调用函数的时候,往函数里传递的数据
-
-
关于return
- 执行return语句的时候,肯定会从当前函数退出
- return 可以返回值
- 如果没有写return ,python中默认 return None
- 执行return语句的时候,肯定会从当前函数退出
-
局部变量和全局变量
- 在函数内或者类内定义的变量叫做局部变量,作用域只在函数或类内
- 定义在文件中,任何敌方都能访问到的叫全局变量
- 可以使用global 关键字把局部变量声明为全局变量
- 在函数内或者类内定义的变量叫做局部变量,作用域只在函数或类内
-
默认参数
- python支持默认参数,也是从右向左赋值
- python支持默认参数,也是从右向左赋值
defTestFun(nNumA=10,nNumB=20):
print(nNumA,nNumB)
if__name__=="__main__":
TestFun();
TestFun(5,1)
-
关键字参数
-
就是可以不按照顺序参数
defTestFun(nNumA,nNumB):
print(nNumA,nNumB)
if__name__=="__main__":
TestFun(nNumB=5,nNumA=6)
-
-
变参
-
python中是通过* 来实现边长参数的
defTestFun(nNumA,*args):
print(nNumA)
print(args)
if__name__=="__main__":
TestFun(1,2,3,4,5,6)
- 边长的参数默认是一个元组
- 边长的参数默认是一个元组
-
类
-
为什么会有面向对象理念?
- 因为所有的程序都追去的是高内聚,低耦合
-
所谓高内聚低耦合就是指:
- 自己做自己的事
- 不过多的依赖外部的数据和代码
- 自己做自己的事
- 因为所有的程序都追去的是高内聚,低耦合
-
面向对象的特点是什么?
-
封装,继承,多态
-
什么是封装?
- 隐藏数据,封装方法
- 隐藏数据,封装方法
-
什么是继承?
- 有部分或全部的数据和方法可以通用,可以通过继承的方式来减少代码的书写量
- 有部分或全部的数据和方法可以通用,可以通过继承的方式来减少代码的书写量
-
什么是多态
- 对于一种指令,不同的对象有不同的反应
- 对于一种指令,不同的对象有不同的反应
-
-
-
类的定义
-
类的定义: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传参
- 只是需要显式的显示出来
- 不需要给这个self传参
- 注:如果没有父类,默认的父类就是object
-
类中的数据
-
类数据属性
-
跟c++中的const 成员类似,不属于任何一个对象,只属于类
- 定义方式类似与上面的nCount
-
-
实例数据属性
- python中把对象叫做实例
- 实例数据属性需要加self
-
对象可以在任何敌方加实例数据
- 只是添加的时候构造函数会被自动调用,所有一般在构造函数中添加数据成员
- 只是添加的时候构造函数会被自动调用,所有一般在构造函数中添加数据成员
-
-
类中的方法
-
实例方法(普通成员方法)
- 参数列表中恒有self
-
类方法
- 使用@classmethod修饰符修饰,通过cls访问类的相关属性
- 使用@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
评论
发表评论