Python基础学习之函数方法实例详解


Posted in Python onJune 18, 2019

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
python转换摩斯密码示例
Feb 16 Python
Python实现LRU算法的2种方法
Jun 24 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
基于python时间处理方法(详解)
Aug 14 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
Flask之请求钩子的实现
Dec 23 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 #Python
Python弹出输入框并获取输入值的实例
Jun 18 #Python
python使用tkinter库实现五子棋游戏
Jun 18 #Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 #Python
python 弹窗提示警告框MessageBox的实例
Jun 18 #Python
python实现五子棋小程序
Jun 18 #Python
Python 实现还原已撤回的微信消息
Jun 18 #Python
You might like
一个简单php扩展介绍与开发教程
2010/08/19 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
AJAX的使用方法详解
2017/04/29 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
python regex库实例用法总结
2021/01/03 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
易程科技软件测试笔试
2013/03/24 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
家长评语大全
2014/01/22 职场文书
表决心的诗句大全
2014/03/11 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS