Python基础之初识函数
1. 为什么要使用函数
假如说,现在python发生了一个bug,结果就是len方法不能使用了。
然后,现在有一个需求就是让计算“Hello world”的长度,那么怎么办呢?
这个问题很简单,那么来用代码实现一下:
s = "Hello world"
length = 0
for i in s:
length += 1
print(length) #length = 11
这个时候,功能就已经实现了,但是现在又有了一个新的需求,就是要计算另外一个字符串的长度,”my length”。
所以,重新写代码,变成了这样:
s = "my length"
length = 0
for i in s:
length += 1
print(length)
这种方法确实可以实现len()方法,但是总感觉有什么地方不好。这是为什么呢? 首先,之前只要我们执行len方法,就可以直接拿到一个字符串的长度了,而现在为了实现相同的功能,我们需要把相同的代码写了很多遍,这就造成了代码冗余。
其次,之前使用len方法的时候,代码读起来很简单,一看就知道这两句代码是在计算长度,但是刚刚的代码却不是那么容易弄懂,这就是因为可读性差。
那我们能不能只写一次代码,就能实现先前所作的操作呢。
每次想要实现计算长度的功能的时候,只需要把这个代码拿过来就行了。
那这个答案是可以的。
2. 初识函数定义与调用
这里就有一个方法能把实现功能的代码封装起来。
def mylen(): s = "hello world" length = 0 for i in s: length += 1 print(length)
3. 函数的定义和调用
def mylen(): """计算字符串s的长度""" s = "hello world" length = 0 for i in s: length += 1 print(length) #函数调用 mylen()
定义:
def: 关键字开头,空格之后接函数名称和圆括号(), 最后还有一个英文冒号“:”。
def 是固定的,不能变,而且是连续的def三个字母,不能分开。
空格: 为了将def关键字和函数名分开,必须之间加上空格,默认空一格。
函数名: 函数名只能包含字符串,下划线和数字,而且不能以数字开头。函数名的定义和变量名的定义一致,而且函数名要尽量简短,并且有意义,能表达出函数的功能。
括号: 这个是必须要添加的。
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行,以增加代码的可读性。
调用:就是函数名(),要记得加上()
4. 函数的返回值
我们在上面写了一个叫mylen()的函数,这个函数可以帮助我们计算字符串的长度,并且把结果打印出来。但是,这个还是和我们经常使用的len()不太一样。在以前我们调用的len()的时候,我们必须用一个变量来接收这个值。
str_len = len("Hello world")
这个str_len就是“Hello world”的长度,那么我们自己写的函数怎么做到这一点呢?
我们只需要在函数的最后加上一个return,return后面写上要返回的值就可以了。
5. return关键字的作用
return在pycharm中是一个关键字,中文意思是“返回”, 所以我们也称写在return后面的值叫“返回值”。
返回值有三种情况,分别是:没有返回值,返回一个值,返回多个值。
5.1 没有返回值
在不写return的情况下,会默认返回一个none。
def mylen(): """计算s的长度""" s = "hello world" length = 0 for i in s: length += 1 print(length) #函数调用 str_len = mylen() #因为没有返回值,此时的str_len为None print("str_len:", str_len)
只写return,后面不写其他内容,也会返回None,因为这里用到了return的另外一个用法,那就是一旦遇到return,结束整个函数。
def return_demo(): print(111) return print(222) ret = return_demo print(ret) #输出结果是111,因为在执行到return的时候,函数结束执行
return None: 和上面的结果是一样的,结果都是None,但是一般不这样写。
def return_demo(): print(111) return None print(222) ret = return_demo() print(ret)
5.2 返回一个值
如果要返回一个值,只需要在return的后面写上要返回的内容即可。
def mylen(): """计算s的长度""" s = "hello world" length = 0 for i in s: length += 1 return length str_len = mylen() print("str_len": str_len)
注意: return和返回值之间要有空格,可以返回任意数据类型的值。
5.3 返回多个值
可以返回任意多个,任意数量类型的值
def ret_demo(): return 1, 2, 3, 4 ret = ret_demo() print(ret)
返回的多个值会被组织成元组被返回,也可以用多个值来接收。
def ret_demo(): return 1, 2, 3, 4 #返回多个值,用一个变量接收 ret = ret_demo() print(ret) #用多个值接受返回值:返回几个值,就用几个变量接收 a, b, c, d = ret_demo() print(a, b, c, d)
这里用到了序列解压的知识。