函数的初识
- why:以功能(完成一件事:输入密码、登录、注册、获取长度等)为导向。 一个函数只能封装一个主要功能。具有减少重复代码,可读性高等优点。(可类比len函数)
- when:函数可以随时调用
#假设python没有len函数,请你用代码算出给定任意字符串、列表等的长度,务必请自己编写一下,参考如下:
s1 = 'asdfghjkl'
len = 0
for i in s1: #当要遍历一个可迭代对象时经常用for
len += 1
print(len) #9
len = 0
l1 = [1,2,3,4,5,6,7]
for i in l1:
len += 1
print(len) #7
这样写,重复代码太多且代码的可读性差
-
对上放代码进行改进,定义一个函数:
def My_Len(s): len = 0 for i in s: len += 1 print(len) #测字符串/列表的长度: s1 = 'asdfghjkl' My_Len(s1) #9 l1 = [1,2,3,4,5,6,7] My_Len(l1) #7
-
how:函数以def定义后再加一个空格再加上函数名(取的函数名最好具有描述性)再加上一个英文冒号,示例如下:
def HanShu(): #def 函数名(): pass # 函数主题 return 返回值 # return 返回值,可有可无
- 函数名与变量设置相同,一般以驼峰命名法(HanShu、hanShu、Hanshu),函数名后一定要加()和:
- 函数体中最好不要写print(),函数体向前缩进一个Tab
- 当编写的代码中包含 函数名() 后,函数会被执行。
- 函数的返回值return: 在函数中遇到return直接结束函数的调用;并给函数外部返回一个返回值,将数据返回给函数的执行者、调用者。返回值可被print打印出,若无返回值,print会打印出None。
- return可返回多个值,会以元祖的形式将多个元素返回给函数的执行者。(元祖可以进行拆包)
-
函数的传参:让函数封装的这个功能变为动态可传入的(盘活)。参数分为实参和形参
-
实参:函数的执行时传入的参数
-
形参:函数的定义时接受的参数
def func(a): #a:形参,定义函数时定义的参数,若定义了形参,则调用函数时必须向函数传入 实参。(特殊情况后文再说) a += 1 return a print(func(6)) #调用函数 6:传入的实参。 >>>7
-
实参角度:
-
位置参数:按照实参位置参数与形参的对应顺序(从左到右)依次传入。
def func(a,b): c = a / b return c print(func(10,2)) >>>5.0 #只要运算符中有除法,得出来的答案都是浮点数
-
关键字参数:当形参过多时,需要将实参传入的顺序记住,容易出错。关键字参数无需顺序
def func(name,sex,hight,weight): c = '我叫{},性别{},体重是{},身高{}'.formt(name,sex,weight,hight) return r print(func('山就在那儿','男','60Kg','1.7m')) #python默认从左至右将实参传给形参,当形参过多时容易出错,但可以使用关键字参数传入。 >>>我叫山就在那儿,性别男,体重是1.7m,身高60Kg print(func(name='山就在那儿',sex='男',weight='60Kg',hight='1.7m')) >>>我叫山就在那儿,性别男,体重是60Kg,身高1.7m
-
混合传参:位置参数一定要放在关键字参数前方,关键字参数一定要放在位置参数后面。否则会报错。
def func(name,sex,hight,weight): c = '我叫{},性别{},体重是{},身高{}'.formt(name,sex,weight,hight) return r print(func('山就在那儿','男',weight='60Kg',hight='1.7m')) >>>我叫山就在那儿,性别男,体重是60Kg,身高1.7m
-
知识点补充:三元运算符:简单的if-else语句可以简化为三元运算符。
-
#判断a,b的大小 a = 10 b = 11 c = a if a>b else b print(c) 11 #c = a if a>b else b 等同于: if a>b: c = a else: c = b
#定义一个函数:能为函数传入两个参数,打印出两个参数中最大的一个参数 def ComPlie(a,b): c = a if a>b else b return c print(ComPlie(11,10)) >>>11 #编码进阶: def ComPlie(a,b): return a if a>b else b #return的为c,因此可以将两个c合并,并省去参数c print(ComPlie(11,10))
-
形参角度:
-
位置参数:形参位置参数必须与实参一一对应,与实参位置参数一样,只是观察角度不同,不再多叙述。
-
默认参数(默认值参数):若有位置参数,默认参数一定要在位置参数后面,默认参数可以被更改。可参考open函数的默认参数。
-
实参与形参必须一一对应,不可一对多或者多对一,否则会报错。建议读者自测一遍。
def func(a,b,c=10): d = (a + b)/c return d print(func(9,1)) >>>1 print(func(5,3,c=2)) >>>4 print(func(5,3,2)) #实参传入默认参数时关键字可以不写,但不推荐此方法。 >>>4
-
还有两种形参类型,请看明天的python基础学习day10
-
-