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. noip杂题题解

    这道题没有什么可说的,先统计,然后几次快排,答案就出来了 Code(整齐但不简洁的代码) #include<iostream> #include<cstdio> #includ ...

  2. Python3基础 sys.path.append 增加模块的搜索路径

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. C#中dll附加配置文件

    DLL-with-configuration-file带配置文件的dll http://www.codeproject.com/Tips/199441/DLL-with-configuration-f ...

  4. Linux下替换默认版本的protobuf

    1. 下载 下载地址,我下载的是protobuf-all-3.5.0.tar.gz,尽量下载all,里面包含protobuf库的所有文件. 2. 编译 ./configure make make in ...

  5. 【异常记录(11)】 Web应用程序项目 已配置为使用 IIS。无法访问 元数据库。您没有足够的特权访问计算机上的 IIS 网站

    解决办法: 1.项目上右键, 编辑 xxxx.csproj 2.找到  <UseIIS> 标签, 改为 <UseIIS>False</UseIIS> 3.右键,重新 ...

  6. NOI 7614 最低通行费(多段图最短路)

    http://noi.openjudge.cn/ch0206/7614/ 题意: 有一个N*N的正方形网格,商人从网格的左上角进,右下角出.每穿越中间1个小方格,都要花费1个单位时间.商人必须在(2N ...

  7. API接口自动化之2 处理http请求的返回体,对返回体做校验

    举例一个接口测试的常见流程 1) 发送接口请求2) 断言接口响应状态是不是200 OK3) 断言接口的响应时间低于某一个值(看情况,不是必选)4) 断言响应数据是否正确,一般的做法是判断某一个值是否相 ...

  8. tp5.0 composer命令插件

    1.单元测试composer require topthink/think-testing 1.* (5.0) composer require topthink/think-testing 5.1官 ...

  9. python导包显示No module named XXX问题

    最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: #coding=u ...

  10. TestNG 101

    最近看了点TestNG,做个入门笔记 0.Maven + TestNG 0a. 创建Maven 项目,pom中添加依赖(可能还需要安装TestNG插件 <dependencies> < ...