def 定义一个方法

在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python中内置排序的方法),在编程中,我们肯定是会多次用到这个功能的,如果我们每次都在要用这个功能时,都去写一遍,那实在是太影响编程效率了,这时我们就可以通过def去定义一个排序的方法,那么我们就可以在要使用的时候直接调用即可,而不需要去重写代码

事实上,我们之前也接触过很多内置方法,比如len()获取一个列表的元素个数,或者是split()对字符串或列表进行切片,当然还有针对列表的排序方法sort()

1
2
3
4
5
6
7
8
9
In [9]: My_list = [4534556233 ,456 ,2342356 ,2343452,212]
 
In [10]: My_list.sort()
 
In [11]: My_list
Out[11]: [455656212233234345456345223423]
 
In [12]: len(My_list )
Out[12]: 10

  

定义一个方法的语法结构

def后面接你定义的方法的名称,名称后面要加一对括号,括号里你可以写你需要操作的元素,也就是形参,如果你的方法只是输出或是不需要操作数值元素的,你也可以不加参数,然后这一行接一个冒号,下面你就可以来定义你的方法

在调用的时候直接方法名称后面加上括号就行,括号里放实参,注意不管有没有参数,调用时都要加括号,和定义方法一样

例如不加参数:

1
2
3
4
5
6
In [13]: def hello():
    ...:     print("hello susmote")
    ...:
 
In [14]: hello()
hello susmote

  

传递参数

1
2
3
4
5
6
7
In [15]: def add(a, b):
    ...:     res = + b
    ...:     print(res)
    ...:
 
In [16]: add(2553)
78

  

下面的方法你可以写一个return 语句,return 后面接一个你需要返回的值,和前面说的一样,如果不需要返回值,你也可以不写return语句

注意,在定义一个方法时,return 语句代表着结束,后面的语句不会再执行,所以一般在方法定义的最后一行写return语句

如果你这个函数有返回值,那么你就可以直接把函数的执行结果直接赋值给一个变量(或者是直接打印)

1
2
3
4
5
6
7
8
In [19]: def add(a, b):
    ...:     return a+b
    ...:
 
In [20]: res = add(1019)
 
In [21]: print(res)
29

  

1
2
3
4
5
6
In [22]: def add(a, b):
    ...:     return a+b
    ...:
 
In [23]: print(add(1019))
29

  

下面我们通过写一个求斐波那契数列的方法来增强对定义方法的理解

斐波那契数列:这个数列从第3项开始,每一项都等于前两项之和。想详细了解的话,可自行上网搜索

1
2
3
4
5
6
7
8
9
10
In [24]: def fib(n):
    ...:     a, b = 01
    ...:     while a < n:
    ...:         print(a, end=" ")
    ...:         a,b = b,a+b
    ...:     print()
    ...:
 
In [25]: fib(10)
0 1 1 2 3 5 8

  

我简单的讲解以上代码:

首先定义了一个fib()方法,传了一个形式参数n,这个n是作为一个限制,实际意义是求所有的不大于n的斐波那契数列中的值

然后在下面是一个赋值语句,这种语法在Python中应该是独有的,前面的变量分别对应后面的值,一一对应,把0赋给了a, 1赋给了b

然后就是一个while语句,也就是我前面说的传进来的参数 n 的作用,只要是值不大于n就继续循环,知道最后大于n跳出循环

第四行语句,输出这个数列中的值,在这里我们要注意,print方法后面是可以加很多参数的,这个我们后续会仔细讲,end=“ ”,意思就是,每次都以一个空格结尾,等价于,print(a , " ")

然后下面又是一个赋值语句

注意它们是按照顺序来执行赋值语句的,先把b的值赋给了a,再把a+b的值赋给了b

最后是一个print(),是用来换行的,这个不多说了

然后在这里我们要明白定义的方法是一个对象,并不能直接通过print输出

1
2
3
4
5
6
7
8
9
10
In [26]: def fib(n):
    ...:     a, b = 01
    ...:     while a < n:
    ...:         print(a, end=" ")
    ...:         a,b = b,a+b
    ...:     print()
    ...:
 
In [27]: fib
Out[27]: <function __main__.fib>

  我们还可以吧这个方法赋给一个变量

1
2
3
4
In [30]: f = fib
 
In [31]: f(10)
0 1 1 2 3 5 8

  

前面我们讲了return语句应该在什么情况下写上,当时我只是很浅显的介绍了,其实不管你加不加都是会返回值的

1
2
3
4
5
6
7
8
9
In [33]: def add(a, b):
    ...:     print(a + b)
    ...:
 
In [34]: ret = add(1019)
29
 
In [35]: print(ret)
None

  

如果你没有加return的话,那么会默认返回一个None

return不仅能够返回简单的数值字符类型,还能返回列表、字典等高级数据类型

例如把斐波那契数列中的值都存到一个列表中,然后通过return返回

1
2
3
4
5
6
7
8
9
10
11
12
13
In [40]: def fib_list(n):
    ...:     result = []
    ...:     a,b = 0,1
    ...:     while a < n:
    ...:         result.append(a)
    ...:         a, b = b, a+b
    ...:     return result
    ...:
 
In [41]: my_fib_list = fib_list(100)
 
In [42]: my_fib_list
Out[42]: [01123581321345589]

  

上面的代码相信应该不需要多讲了吧,append在前面讲列表的时候讲到过,对一个列表增加数据

_Python定义方法的更多相关文章

  1. 09_Python定义方法_Python编程之路

    有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解 def 定义一个方法 在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python ...

  2. JavaScript简单对象的定义方法

    工厂模式: 初级开发者可能会这样定义对象: var obj = new Object(); obj.name = "hero"; obj.showName=function (){ ...

  3. Pyqt 控件的信号槽事件定义方法

    转载来自:http://my.oschina.net/midnite/blog/39399 Qt采用信号槽来设定UI界面上元素动作的事件绑定.自Qt4.5开始,引入了一个新的信号槽与事件绑定的方法.界 ...

  4. Matlab中函数定义方法

    Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...

  5. 【翻译十六】java-固定对象的定义方法

    A Strategy for Defining Immutable Objects The following rules define a simple strategy for creating ...

  6. 几种常用的JS类定义方法

    几种常用的JS类定义方法   // 方法1 对象直接量var obj1 = {    v1 : "",    get_v1 : function() {        return ...

  7. JS function的定义方法,及function对象的理解。

    废话篇: 今天看到了Function的内容,各种晕,各种混淆有木有.简直是挑战个人脑经急转弯的极限啊.不过,最终这一难题还是被我攻克了,哇咔咔.现在就把这东西记下来,免得到时候又忘了就悲催了.... ...

  8. js中使用使用原型(prototype)定义方法的好处

    经常在前端面试或是和其他同行沟通是,在谈到构造在JS定义构造函数的方法是最好使用原型的方式:将方法定义到构造方法的prototype上,这样的好处是,通过该构造函数生成的实例所拥有的方法都是指向一个函 ...

  9. JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)

    第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.col ...

随机推荐

  1. ORM 关系对象映射 基础知识点

    优点: 1.ORM使我们通用的数据库变得更加的简单便捷. 2.可避免新手程序员写sql语句带来的性能问题. 1. 创建单表 2. 创建关键表 1). 一对一 2). 一对多 3). 多对多 创建表的语 ...

  2. mysql主备部署[高可用]

    配置方案 master:192.168.99.61 service-id:61 slave:192.168.99.62 service-id:62同步账号:sync   同步密码:sync 主:192 ...

  3. bzoj 3505 数三角形 - 组合数学

    给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出 ...

  4. 不明原因报错集中处理:Undefined

    1, NSGenericException错误 Terminating app due to uncaught exception 'NSGenericException', reason: '*** ...

  5. P3066 [USACO12DEC]逃跑的BarnRunning Away From

    目录 题目 思路 错误&&注意 代码 题目 luoguP3066 思路 虽说这个题目有多种做法,但 左偏树算法: 我们发现这个合并的时候并不好合并,因为存的值不是固定的 那我们是不是可 ...

  6. ZooKeeper 增加Observer部署模式提高性能

    Observer:在不伤害写性能的情况下扩展ZooKeeper. 虽然通过Client直接连接到ZooKeeper集群的性能已经很好了,可是这样的架构假设要承受超大规模的Client,就必须添加Zoo ...

  7. Linq 对List的一些操作

    代码: public class Person { public int ID { get; set; } public string Name { get; set; } public int Ag ...

  8. C# String.Join 与 StringBuilder 对比,谁更快

    String.Join 文档      StringBuilder 文档 这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下. 首先对于 ...

  9. shell 注释

    以 # 开头的行就是注释,会被解释器忽略. 通过每一行加一个 # 号设置多行注释,像这样: #-------------------------------------------- # 这是一个注释 ...

  10. python profile性能分析

    #! /usr/bin/env python # encoding=utf8 import profile def func1(): for i in range(1000): pass def fu ...