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)
那让我们来看下上面这段代码做了什么。
其实除了def这一行和后面的缩进,其他的好像都是正常执行的代码。
当我们执行的时候,却什么也没有发生,这是什么原因呢。
这是因为,这只是把代码封装起来的过程,但是要执行这块封装起来的代码,却需要其他特别的召唤术:mylen()。
只需要把mylen()写在和def同级的下面可以调用封装的代码块了。
其实,我们刚刚就是写了一个函数,然后成功的调用了这个函数。

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)

这里用到了序列解压的知识。

posted @ 2018-11-24 16:03  _杨魏  阅读(190)  评论(0编辑  收藏  举报