您的位置:首页 > 编程语言 > Python开发

python学习(2):函数、模块、类

2016-07-20 20:29 399 查看
在实际编程过程中,程序中有很多部分实现的功能是相同的。如果每次实现这些功能都需要找到先前写好的代码,并复制到相应的位置,这是十分麻烦的事。为了减少这部分的工作量,使用模块、函数、类是很有必要的。像C++和java一样,python也是一门面向对象的语言,其中的概念与它们基本一致。在学习python时,主要需要关注的是那些python独有的特性。


函数

在python中对于函数的使用与matlab比较类似。

在一个文件中可以定义多个函数,定义方式有两种,def

定义法和lambda定义法。

常用的定义标识符为def。

要点:

(1)函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

(2)任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

(3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

(4)函数内容以冒号起始,并且缩进。

(5)return [表达式] 结束函数,选择性地返回一个值给调用方。

def sum(x,y)
z=x+y
return z


在python中,返回参数的类型、个数全部由return后的表达式决定,不带表达式的return相当于返回 None。

函数的输入参数可以设置默认值,设置方式为:

def function(x1=0)


这种方式下,在调用函数时,若输入参数缺省,则输入参数被设置为默认值。

在使用lambda定义函数时,代码如下:

sum=lambda x,y:x+y


函数的调用过程,变量的作用域与其它语言一样,不做赘述。

注意:python中所有的函数的参数传递都是引用传递(等价于C语言中输入变量为变量地址)。因此在函数内,对于输入的参数的任何改变,都是直接对该变量的改变,而不是C语言中的只是传递了变量的值。

模块

模块就是一个集合了一部分代码的一个文件,类似于C语言中的自建库,也类似与matlab中的函数文件。

模块能定义函数,类和变量。模块里也能包含可执行的代码。通过import语句可以调用该模块中的内容。

局部变量与全局变量的含义与其它语言相同,不作赘述。

Python中有一点比较独特的是包。在python中,除了可以import文件以外,还可以import文件夹。

将需要用到的文件和文件夹放到同一个文件目录下,并在此目录下建立一个初始化模块文件,命名为:__init__.py(这种命名属于系统确定,不可随意更改)

在文件中写入多条import语句,依次import想要使用的模块和文件夹。

此后,在需要调用这多个文件时,不再需要一个一个地import了,只需要import它们所在文件夹的名称即可(此文件夹应当在python的搜索空间内)。

类是面向对象的语言中都会存在的一个概念。在C语言中,类可以被看作是一个结构体。不同的是,这个结构体更加强大,在其中可以定义函数。

就像结构体一样,一个类就是一种自定义的数据类型,在定义后可以像使用int、string、char等一样地使用它。

类的结构:

一个类由四部分组成:类变量、实例变量、构造方法、一般方法。先给出一段类定义的代码,来对类中各个部分的概念进行描述。

class Employee: #类的定义
empCount = 0  #类变量,在所有此类的实例中,值相等
def __init__(self, name, salary): # 构造方法,在实例的声明中会被自动执行
self.name = name         #实例变量,在不同的实例中,值不同
self.salary = salary     #实例变量
Employee.empCount += 1

def displayCount(self):   #一般方法,只有在调用时被执行
print "Total Employee %d" % Employee.empCount

def displayEmployee(self):  #一般方法
print "Name : ", self.name,  ", Salary: ", self.salary


类的定义没什么新奇之处,不再赘述。

类变量的含义比较特殊,它即不同于全局变量,也不同于局部变量。它是一个介于二者之间的一种类型。它的作用范围是这个类,所有这个类的实例中,这个变量的值是一致的,即它们公用一个存储空间。

构造方法即在定义一个实例时,会用到的函数。每个类中只可以有一个构造方法(明明为__init__的那个)。此函数不同特地调用,系统会自动执行,且对每个实例只执行一次。在构造方法中,包含着实例变量和可执行代码。实例变量就是局部变量了,对应与C语言中结构体中的结构体变量。对不同的实例而言,此变量的值不同。

一般方法就是这个类的特有方法,只有此类的数据可以调用。每个类中可以有多个一般方法。

类的继承是一个类中常用的方法。同样地,先通过一段代码来进行说明。

class Parent:        # 定义父类
parentAttr = 100
def __init__(self):
print "调用父类构造函数"

def parentMethod(self):
print '调用父类方法'

def setAttr(self, attr):
Parent.parentAttr = attr

def getAttr(self):
print "父类属性 :", Parent.parentAttr

class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"

def childMethod(self):
print '调用子类方法 child method'


在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数。

Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

方法的重写:由于在使用类的方法时,一般都是现在此类中寻找该方法,所以可以在类中重新写一个与基类中名称相同的方法。在此后的调用中,就会直接调用这个新建的方法。

私有变量和私有方法是指不能在实例中进行访问和调用的类的变量和方法,只能在类的内部进行使用。通过在变量名和方法名前面加__来实现。

class JustCounter:
__secretCount = 0  # 私有变量
publicCount = 0    # 公开变量

def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount


Python不允许实例化的类访问私有数据,但你可以使用object._className__attrName 访问私有变量。

至此,python的基础内容已经讲解完毕,在一般的python的使用中,这些就足够了。但是如果需要设计大型软件或者做大型项目,或者任何涉及到计算机底层架构的内容,这部分内容是远远不够的。在今后的学习中,要逐层深入,争取能够完成一个个人的开源项目。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: