Python基础学习之函数方法实例详解
作者:George-Henry
本文实例讲述了Python基础学习之函数方法。分享给大家供大家参考,具体如下:
前言
与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
python的函数具有非常高的灵活性,可以在单个函数里面封装和定义另一个函数,使编程逻辑更具模块化。
一、Python的函数方法定义
函数方法定义的简单规则:
1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2. 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4. 函数内容以冒号起始,并且缩进。
5. return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
函数demo:
def test_method(): test_string = "test" return test_string
方法和函数的区别就是,方法是属于类里面的,可以获取调用类的属性和定义的成员,使用self访问,方法的定义如下:
Class A: self.test_string = "test" def test_method(self): return self.test_string
注:如果方法没有使用类成员,则不需要带self,即方法和函数一致,此时也成为静态方法@staticmethod
二、函数和方法的参数类型:
1. 必备参数: 必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,必备参数定义在函数定义的括号()内。
2. 默认参数: 默认参数在调用方法或函数,不传入该参数时,会使用默认的值,默认值写在(内),必须在必备参数之后,如 def test_method(str, default_str = "hello")
3. 不定长参数: python函数除了可以定义默认参数之外,还可以定义可变参数,如*args和**kwargs:
(1) 函数内部可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数,在函数内部,直接把变量 args 看成一个 tuple 就好了;
(2) 双星号(**):**kwargs将参数以字典的形式导入,如bar(1,a=2,b=3),在内部kwargs参数就是{'a': 2, 'b': 3};
(3) 对于函数外部带单星号*,外部传入的参数带*号,则在内部则是以解压方式赋给函数的每个参数;
4. 匿名函数: python使用lambda来创建匿名函数:
(1)lambda只是一个表达式,函数体比def简单很多;
(2)lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去;
(3)lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数;
lambda的demo:
sum = lambda arg1, arg2: arg1 + arg2;
调用:
sum(1,2) # 返回3
三、方法的复用和继承:
1. 方法的继承:
(1) 如果一个类继承了基类,则需要在这个类的构造函数(__init__())里面调用基类的初始化方法,即添加:super().__init__()
来初始化基类;
(2) 这个类可以调用基类中存在而本类不存在的方法,这就是子类调用父类的方法,可以直接使用self调用;
2. python函数没有重载功能:
函数重载主要是为了解决两个问题:
①.可变参数类型;
②.可变参数个数。
另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的。
对于情况1,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在python中很可能是相同的代码,没有必要做成两个不同函数;
对于情况2,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的;
鉴于情况1跟情况2都有了解决方案,python自然就不需要函数重载了
3. 方法覆盖: 一个类用self
调用基类中存在而本类也存在的方法,这时子类方法会优先被调用,替代调用父类的方法,如果要调用父类的该方法,需要用super()
参数;
四、Python函数与方法的其他知识:
Python常用内置函数:
(1) dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__()
,该方法将被调用;
(2) type()函数,type()只带一个变量参数则返回变量的类型,但是该函数如果带三个参数则可以返回新创建的类对象(动态创建类对象):
# 使用type()函数定义类 # 实例方法 def __init__(self, name): # 实例属性 self.name = name # 类方法 @classmethod def study(cls): pass # 静态方法 @staticmethod def cal_student_num(): pass # 元类最大的作用不在于创建一个新的类 A = type( 'A', (object,), { 'role': 'student', '__init__': __init__, 'study': study, 'cal_student_num': cal_student_num })
(3) Python函数中,可以通过声明全局变量(global 变量名)来调用函数外部的变量,也可以通过将外部变量传参的形式传入函数内使用,global的方式会改变外部变量的值;
关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。