def 定义一个方法

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

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

1
2
3
4
5
6
7
8
9
In [9]: My_list = [45, 345, 56, 233 ,456 ,23423, 56 ,234, 3452,212]
 
In [10]: My_list.sort()
 
In [11]: My_list
Out[11]: [45, 56, 56, 212, 233, 234, 345, 456, 3452, 23423]
 
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 = a + b
    ...:     print(res)
    ...:
 
In [16]: add(25, 53)
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(10, 19)
 
In [21]: print(res)
29

  

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

  

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

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

1
2
3
4
5
6
7
8
9
10
In [24]: def fib(n):
    ...:     a, b = 0, 1
    ...:     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 = 0, 1
    ...:     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(10, 19)
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]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

  

上面的代码相信应该不需要多讲了吧,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. Java的各种加密算法

    Java的各种加密算法 JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属 ...

  2. 20145106java实验四

    实验名称:Java网络编程 实验内容: 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145109竺文君 博客地址: 在本次实验中,是以我作为服务 ...

  3. 20145227鄢曼君《网络对抗》Web安全基础实践

    20145227鄢曼君<网络对抗>Web安全基础实践 实验后回答问题 1.SQL注入攻击原理,如何防御? SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是 ...

  4. 20145306 《网络攻防》 MSF基础应用

    20145306张文锦<网络对抗>MSF应用 Adobe阅读器渗透攻击 两台虚拟机,其中一台为kali,一台为windows xp sp3,并保证两台虚拟机可以ping通. 实验过程 进入 ...

  5. BZOJ 2141 排队(树状数组套treap)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2141 题意:给出一个数列A,每次交换两个数的位置.输出交换后逆序对的个数. 思路:首先, ...

  6. TeeChart入门

    此链接可以作为参考http://tech.sina.com.cn/s/2008-07-07/1612722495.shtml 需要添加引用 using Steema.TeeChart;//tchart ...

  7. POJ 1681 Painter's Problem(高斯消元+枚举自由变元)

    http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...

  8. python argparse模块--转载

    add_argument:读入命令行参数,该调用有多个参数 ArgumentParser.add_argument(name or flags…[, action][, nargs][, const] ...

  9. CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法

    CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)的方法 准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A I ...

  10. 《剑指offer》第三十四题(二叉树中和为某一值的路径)

    // 面试题34:二叉树中和为某一值的路径 // 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所 // 有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. #i ...