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在前面讲列表的时候讲到过,对一个列表增加数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具