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中列表生成式和生成器的区别
Aug 03 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
Python内置random模块生成随机数的方法
May 31 Python
Python操作注册表详细步骤介绍
Feb 05 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
如何用Django处理gzip数据流
Jan 29 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php树型类实例
2014/12/05 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
js function定义函数使用心得
2010/04/15 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python简单的制作图片验证码实例
2017/05/31 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python使用mysql的两种使用方式
2018/03/07 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
21岁生日感言
2014/02/27 职场文书
出售房屋协议书范本
2014/10/06 职场文书
先进个人材料怎么写
2014/12/30 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
深入理解pytorch库的dockerfile
2022/06/10 Python