Python3萌新入门笔记(18)

这一篇教程,我们来了解如何自定义函数。

在我们编程的过程中,往往要写一些进行某种运算的代码,通过这些代码获取我们想要的结果。

有时候,这些运算的代码,我们需要使用到多次,为了避免大量重复编写这些代码,我们可以把这些运算过程的代码定义为函数。

在第一篇教程中,我们见过下面这张图片,这张图片就是我们调用函数时要写入的内容。

那么,定义函数也必须包含这些内容。

另外,还要包含定义函数的关键字以及函数中运算过程的代码。

例如,我们定义一个获取身份证号中出生日期的函数。

示例代码:

def get_birthday(id):  # 定义函数名称并设定参数
    birthday = id[6:14]  # 函数运算过程
    print(birthday)  # 函数运算过程

get_birthday('110123199001012121')  # 调用函数,显示输出结果为:19900101
get_birthday('120122199508081321')  # 调用函数,显示输出结果为:19950808

通过上方的代码,大家能够看到,定义函数时的一些关键内容:

1、要使用def这个关键字进行定义。

2、函数的名称建议使用小写单词组成,单词间以下划线分隔(下划线命名法),这样比较方便理解函数名称的含义。

3、参数是一个自定义的变量名称,通常也是使用小写的单词,用于提示输入的参数内容。

4、定义参数名称与参数以“:”结尾。

5、在定义函数名称与参数的下方,向右缩进编写运算代码的语句块。

6、通过函数名称并写入相应的参数即可调用函数,以实现相应的运算。

不过,上方我们定义的函数,并没有返回结果,而是直接在函数运算过程中进行了显示输出。

如果,我们需要获取到的出生日期,再进行使用,我们需要修改一下这个函数。

示例代码:

def get_birthday(id):  # 定义函数名称并设定参数
    birthday = id[6:14]  # 函数运算过程
    return birthday  # 返回运算结果


b = get_birthday('110123199001012121')  # 调用函数
print('您的出生日期是%s。' % b) # 显示输出结果为:您的出生日期是19900101

对比一下我们刚才的两段定义函数的代码,大家能够看到,第二段代码中我们通过return关键字,返回了运算结果(如果不加入return语句,则函数默认执行return None,即函数返回结果为None)。

这样,我们就可以在调用函数时,通过一个变量(例如上方代码中的b变量)接收到这个结果,进行使用。

注意:retrun语句会跳出结束函数,并返回结果,该语句之后的语句将不再被执行。

—————————————————————————-

上面我们定义的函数,只返回了一个结果。

如果,我们想把身份证号码中出生日期的年、月、日分别获取到呢?

接下来,我们再修改一下这个函数。

示例代码:

def get_birthday(id):  # 定义函数名称并设定参数
    year = id[6:10]  # 函数运算过程
    month = id[10:12]  # 函数运算过程
    day = id[12:14]  # 函数运算过程
    return year, month, day  # 返回多个运算结果

y, m, d = get_birthday('110123199001012121')  # 调用函数,将3个返回值存入3个变量
print('您的出生日期是%s年%s月%s日。' % (y, m, d))  # 显示输出结果为:您的出生日期是1990年01月01日。

通过上面的代码,大家可以看到,我们可以通过return关键字,返回多个运算结果。

实际上,函数返回的仍然是1个运算结果。

我们再来看下方这段代码。

示例代码:

def get_birthday(id):  # 定义函数名称并设定参数
    year = id[6:10]  # 函数运算过程
    month = id[10:12]
    day = id[12:14]
    return year, month, day

birthday = get_birthday('110123199001012121')  # 调用函数,返回结果存入变量
print(birthday)  # 显示输出结果为:('1990', '01', '01')
print('您的出生日期是%s年%s月%s日。' % birthday)  # 显示输出结果为:您的出生日期是1990年01月01日。

通过上方代码,我们能够看到,我们可以通过1个变量接收函数的返回结果,这时我们得到的是1个包含了3个元素元组。

—————————————————————————-

在我们定义函数时,有些时候希望某些参数可以省略。

例如,我们通过身份证号码,获取出生日期或者年龄。

我们可以通过设定一个参数来控制函数如何返回结果。

示例代码:

def get_birthday(id, get_age=False):  # 定义函数名称并设定参数,get_age为关键字参数,默认值为False
    if get_age:  # 对参数进行判断
        return 2017 - int(id[6:10])  # 返回计算公式的计算结果
    else:
        year = id[6:10]  # 函数运算过程
        month = id[10:12]  # 函数运算过程
        day = id[12:14]  # 函数运算过程
        return year, month, day  # 返回多个变量值

result = get_birthday('110123199001012121', True)  # 调用函数,输入2个参数
print(result)  # 显示输出结果为:27
result = get_birthday('110123199001012121')  # 调用函数,省略第2个参数
print(result)  # 显示输出结果为:('1990', '01', '01')

在上方这段代码中,我们新增了一个关键字参数,并为其设置默认值。

这样,我们在调用参数时,如果不填写第2个参数,一样可以执行函数。

此时,函数会读取第2个参数的默认值,参与运算过程。

如果,我们只定义参数而不写入默认值,即便函数运算过程中没有使用这个参数,程序也会抛出异常。

异常示例代码:

def get_birthday(id, get_age):  # 定义函数名称与参数
    birthday = id[6:14]  # 函数运算过程
    return birthday  # 返回运算结果

result = get_birthday('110123199001012121')  # 调用函数,此时会抛出异常

异常信息:

异常提示中TypeError是类型错误,提示内容为:get_birthday()函数丢失了1个必须位置的参数’get_age’。

所以,我们在定义函数时,设定的参数如果没有设置默认值,则调用函数时必须填入该参数。

那么,设置默认值的参数我们叫它关键字参数,没有默认值的参数是位置参数

关键字参数对位置没有要求,不管是设定参数还是调用函数时,可以任意顺序写入。

而位置参数必须有着严格的位置和顺序,这样才能在调用函数时一一对应。

正是因为这个原因,当参数中同时包含位置参数和关键字参数时,位置参数要放在所有关键字参数的前面。

大家可以尝试将位置参数放在关键字参数的后方,运行程序会抛出异常提示。

SyntaxError: non-default argument follows default argument

语法错误:无默认值参数跟随默认值参数(即位置参数在关键字参数后方)

—————————————————————————-

另外,我们定义的函数,往往对输入的参数有类型的要求,当输入了错误的类型,会有异常发生。

例如,我们定义一个减法运算的函数,参数为两个整数。

示例代码:

def subtraction(num1, num2):  # 定义函数并设定参数
    result = num1 - num2  # 函数运算过程
    return result  # 返回运算结果


print(subtraction(3, 2))  # 调用函数,并显示输出结果:1。

上方代码中,我们调用函数时输入了两个整数,运行正常,得到了计算结果。

接下来,我们输入错误的参数,比如两个字符。

def subtraction(num1, num2):  # 定义函数并设定参数
    result = num1 - num2  # 函数运算过程
    return result  # 返回运算结果


print(subtraction('3', '2'))  # 调用函数,程序抛出异常。

上方的代码运行之后,程序抛出异常。

TypeError:unsupported operand type(s) for -: ‘str’ and ‘str’。

提示内容为类型错误,不支持的操作数类型:’str’和’str’。

也就是说,字符串类型的参数不能进行减法运算。

这是系统给出的提示,我们也可以自定义这个异常的提示。

我们知道减法可以支持整数与小数,所以我们在函数中可以判断传入的参数值是否这两种类型。

如果不是,则给出异常提示。

示例代码:

def subtraction(num1, num2):  # 定义函数并设定参数
    if not isinstance(num1, (int, float)) \ 
            or not isinstance(num2, (int, float)):  # 判断参数是否指定类型, 代码过长时可以使用"\"换行
        raise TypeError('参数类型错误,参数必须为整数或者小数。')  # 设定自定义异常内容
    result = num1 - num2  # 函数运算过程
    return result  # 返回运算结果


print(subtraction('3',2))  # 调用函数,程序抛出异常。

上方代码中,我们使用内置函数isinstance()对输入的参数值进行类型的比较,当任何一个参数不是int(整数)或者float(小数)类型时,都将抛出异常。

关键字raise用于引发异常,TypeError()为异常类型,括号中可以输入自定义的异常提示。

—————————————————————————-

最后,在我们编写代码时,我们还可以定义空函数。

空函数一般是在还没有确定函数内部代码如何编写,但是又需要不影响程序运行时使用。

我们只需要在函数内容写入pass关键字即可。

示例代码:

def subtraction(num1, num2):  # 定义函数并设定参数
    pass  # 使用pass占位,保证程序运行正常


print(subtraction(1,2))  # 调用函数,返回结果为:None。

以上就是关于定义函数的内容。

关于字符串的相关操作就为大家介绍到这里,谢谢!

本节知识点:

1、定义函数;

2、设定函数返回结果;

3、设定函数返回多个结果;

4、设定参数与参数默认值;

5、参检查与自定义异常;

6、定义空函数。

本节英文单词与中文释义:

1、birthday:出生日期

2、year:年份

3、month:月份

4、day:日期

5、type:类型

6、error:错误

7、missing:丢失

8、required:必须

9、positional:位置

10、unsupported:不支持

11、operand:操作数

练习:

根据输入的手机号码返回运营商名称。

运营商号码列表:

mobile:[134, 135 , 136, 137, 138, 139, 147, 150, 151, 152, 157, 158, 159, 178, 182, 183, 184, 187, 188]

unicom:[130,131,132,145,155,156,171,175,176,185,186]

telecom:[133,149,153,173,177,180,181,189,199]

答案:(见原文评论1楼)

转载自:魔力 • Python » Python3萌新入门笔记(18)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值