这一篇教程,我们来了解如何自定义函数。
在我们编程的过程中,往往要写一些进行某种运算的代码,通过这些代码获取我们想要的结果。
有时候,这些运算的代码,我们需要使用到多次,为了避免大量重复编写这些代码,我们可以把这些运算过程的代码定义为函数。
在第一篇教程中,我们见过下面这张图片,这张图片就是我们调用函数时要写入的内容。
那么,定义函数也必须包含这些内容。
另外,还要包含定义函数的关键字以及函数中运算过程的代码。
例如,我们定义一个获取身份证号中出生日期的函数。
示例代码:
defget_birthday(id):#定义函数名称并设定参数
birthday=id[6:14]#函数运算过程
print(birthday)#函数运算过程
get_birthday()#调用函数,显示输出结果为:
get_birthday()#调用函数,显示输出结果为:
通过上方的代码,大家能够看到,定义函数时的一些关键内容:
1、要使用def这个关键字进行定义。
2、函数的名称建议使用小写单词组成,单词间以下划线分隔(下划线命名法),这样比较方便理解函数名称的含义。
3、参数是一个自定义的变量名称,通常也是使用小写的单词,用于提示输入的参数内容。
4、定义参数名称与参数以“:”结尾。
5、在定义函数名称与参数的下方,向右缩进编写运算代码的语句块。
6、通过函数名称并写入相应的参数即可调用函数,以实现相应的运算。
不过,上方我们定义的函数,并没有返回结果,而是直接在函数运算过程中进行了显示输出。
如果,我们需要获取到的出生日期,再进行使用,我们需要修改一下这个函数。
示例代码:
defget_birthday(id):#定义函数名称并设定参数
birthday=id[6:14]#函数运算过程
returnbirthday#返回运算结果
b=get_birthday()#调用函数
print(您的出生日期是%s。%b)#显示输出结果为:您的出生日期是
对比一下我们刚才的两段定义函数的代码,大家能够看到,第二段代码中我们通过return关键字,返回了运算结果(如果不加入return语句,则函数默认执行returnNone,即函数返回结果为None)。
这样,我们就可以在调用函数时,通过一个变量(例如上方代码中的b变量)接收到这个结果,进行使用。
注意:retrun语句会跳出结束函数,并返回结果,该语句之后的语句将不再被执行。
—————————————————————————-
上面我们定义的函数,只返回了一个结果。
如果,我们想把身份证号码中出生日期的年、月、日分别获取到呢?
接下来,我们再修改一下这个函数。
示例代码:
defget_birthday(id):#定义函数名称并设定参数
year=id[6:10]#函数运算过程
month=id[10:12]#函数运算过程
day=id[12:14]#函数运算过程
returnyear,month,day#返回多个运算结果
y,m,d=get_birthday()#调用函数,将3个返回值存入3个变量
print(您的出生日期是%s年%s月%s日。%(y,m,d))#显示输出结果为:您的出生日期是年01月01日。
通过上面的代码,大家可以看到,我们可以通过return关键字,返回多个运算结果。
实际上,函数返回的仍然是1个运算结果。
我们再来看下方这段代码。
示例代码:
defget_birthday(id):#定义函数名称并设定参数
year=id[6:10]#函数运算过程
month=id[10:12]
day=id[12:14]
returnyear,month,day
birthday=get_birthday()#调用函数,返回结果存入变量
print(birthday)#显示输出结果为:(,01,01)
print(您的出生日期是%s年%s月%s日。%birthday)#显示输出结果为:您的出生日期是年01月01日。
通过上方代码,我们能够看到,我们可以通过1个变量接收函数的返回结果,这时我们得到的是1个包含了3个元素元组。
—————————————————————————-
在我们定义函数时,有些时候希望某些参数可以省略。
例如,我们通过身份证号码,获取出生日期或者年龄。
我们可以通过设定一个参数来控制函数如何返回结果。
示例代码:
defget_birthday(id,get_age=False):#定义函数名称并设定参数,get_age为关键字参数,默认值为False
ifget_age:#对参数进行判断
return-int(id[6:10])#返回计算公式的计算结果
else:
year=id[6:10]#函数运算过程
month=id[10:12]#函数运算过程
day=id[12:14]#函数运算过程
returnyear,month,day#返回多个变量值
result=get_birthday(,True)#调用函数,输入2个参数
print(result)#显示输出结果为:27
result=get_birthday()#调用函数,省略第2个参数
print(result)#显示输出结果为:(,01,01)
在上方这段代码中,我们新增了一个关键字参数,并为其设置默认值。
这样,我们在调用参数时,如果不填写第2个参数,一样可以执行函数。
此时,函数会读取第2个参数的默认值,参与运算过程。
如果,我们只定义参数而不写入默认值,即便函数运算过程中没有使用这个参数,程序也会抛出异常。
异常示例代码:
defget_birthday(id,get_age):#定义函数名称与参数
birthday=id[6:14]#函数运算过程
returnbirthday#返回运算结果
result=get_birthday()#调用函数,此时会抛出异常
异常信息:
异常提示中TypeError是类型错误,提示内容为:get_birthday()函数丢失了1个必须位置的参数’get_age’。
所以,我们在定义函数时,设定的参数如果没有设置默认值,则调用函数时必须填入该参数。
那么,设置默认值的参数我们叫它关键字参数,没有默认值的参数是位置参数。
关键字参数对位置没有要求,不管是设定参数还是调用函数时,可以任意顺序写入。
而位置参数必须有着严格的位置和顺序,这样才能在调用函数时一一对应。
正是因为这个原因,当参数中同时包含位置参数和关键字参数时,位置参数要放在所有关键字参数的前面。
大家可以尝试将位置参数放在关键字参数的后方,运行程序会抛出异常提示。
SyntaxError:non-defaultargumentfollowsdefaultargument
语法错误:无默认值参数跟随默认值参数(即位置参数在关键字参数后方)
—————————————————————————-
另外,我们定义的函数,往往对输入的参数有类型的要求,当输入了错误的类型,会有异常发生。
例如,我们定义一个减法运算的函数,参数为两个整数。
示例代码:
defsubtraction(num1,num2):#定义函数并设定参数
result=num1-num2#函数运算过程
returnresult#返回运算结果
print(subtraction(3,2))#调用函数,并显示输出结果:1。
上方代码中,我们调用函数时输入了两个整数,运行正常,得到了计算结果。
接下来,我们输入错误的参数,比如两个字符。
defsubtraction(num1,num2):#定义函数并设定参数
result=num1-num2#函数运算过程
returnresult#返回运算结果
print(subtraction(3,2))#调用函数,程序抛出异常。
上方的代码运行之后,程序抛出异常。
TypeError:unsupportedoperandtype(s)for-:‘str’and‘str’。
提示内容为类型错误,不支持的操作数类型:’str’和’str’。
也就是说,字符串类型的参数不能进行减法运算。
这是系统给出的提示,我们也可以自定义这个异常的提示。
我们知道减法可以支持整数与小数,所以我们在函数中可以判断传入的参数值是否这两种类型。
如果不是,则给出异常提示。
示例代码:
defsubtraction(num1,num2):#定义函数并设定参数
ifnotisinstance(num1,(int,float))\
ornotisinstance(num2,(int,float)):#判断参数是否指定类型,代码过长时可以使用\换行
raiseTypeError(参数类型错误,参数必须为整数或者小数。)#设定自定义异常内容
result=num1-num2#函数运算过程
returnresult#返回运算结果
print(subtraction(3,2))#调用函数,程序抛出异常。
上方代码中,我们使用内置函数isinstance()对输入的参数值进行类型的比较,当任何一个参数不是int(整数)或者float(小数)类型时,都将抛出异常。
关键字raise用于引发异常,TypeError()为异常类型,括号中可以输入自定义的异常提示。
—————————————————————————-
最后,在我们编写代码时,我们还可以定义空函数。
空函数一般是在还没有确定函数内部代码如何编写,但是又需要不影响程序运行时使用。
我们只需要在函数内容写入pass关键字即可。
示例代码:
defsubtraction(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:[,,,,,,,,,,,,,,,,,,]
uni