目录
1.函数是什么?
一段可以被重复的代码。
不使用函数的代码
#求1-100的和 theSum =0 for i in range(1,101): theSum +=1 print(theSum) #求300-400的和 theSum =0 for i in range(300,401): theSum+=i print(theSum) #求1-1000的和 theSum=0 for i in range(1,1001): theSum+=i print(theSum)
例子:利用函数对重复代码进行了处理。
#使用函数的方式来解决刚才的问题 #定义一个求和函数 def calcSum(beg,end): theSum=0 for i in range(beg,end+1): theSum+=i print(theSum) #调用函数 #求1-100的和 calcSum(1,100) #求300-400的和 calcSum(300,400) #求1-1000的和 calcSum(1,1000)
2.函数的语法格式
2.1函数的定义
def 函数名(形参列表):
函数体(带有缩进的代码才是函数内部的语句)
return 返回值 (return 语句并不是必须的,可以有也可以没有)
形参列表中,可以有多个形参,多个形参之间可以采用逗号分隔。
2.2函数的调用
调用形式一:函数名(实参列表)
调用形式二:返回值=函数名(实参列表)
注意:Python中要求,函数定义写在前面,函数调用写在后面,先定义,后调用。
例子:
#先定义一个函数 #如果只是定义,而不去调用,则函数体里面的代码就不会执行 def test(): print('hello') print('hello') print('hello') #函数调用才会真正执行函数体里面的代码 #函数经过一次定义之后,可以被调用多次 test() test() test()
3.代码警告的处理
警告:提示代码有问题,但是并不影响程序编译的执行。
错误:代码中实打实的问题。
PEP8是python里面的一套非常流行的编程规范,也就是写代码中的一些软性要求。
4.函数的参数
函数的参数就是在函数调用时,赋值给形参。
注意:传入的实参和形参必须匹配
例子:如下由于没有给b,c赋值,所以会出错
def test(a,b,c): print(a,b,c) test(10)
C++ Java 里面,不光要求形参和实参的个数要匹配,还要求类型也要匹配。
但是在Python里面,只是要求个数,对类型没有要求。(动态类型)
例子:
但是并不是随便传入什么类型都可以,只要保证传入的参数类型,在函数体里面能够支持对应的运算即可。
5.函数的返回值
5.1一个函数里面可以有多个return语句
5.2Python中的一个函数可以返回多个值
#这种情况不算是有多个return语句 def test(): return 1 return 2 #一般多个return 语句是搭配分支语句/循环语句的 def isOdd(num): """ 用来判定num是不是奇数!如果是奇数就返回True,不是就返回False :param num: 要判定整数 :return: 返回True False 表示是不是奇数 """ if num%2==0: return False else: return True print(isOdd(10)) print(isOdd(19))
可以利用多元赋值的方式,依次获取每个值
多元赋值就把x赋给了a,y赋给了b
#写一个函数,返回平面上的一个点 #横坐标,纵坐标 def getPoint(): x=10 y=20 z=30 return x,y,z a,b=getPoint()
如果现在返回了多个值,但是我想用其中的一部分,不关注其他的,可以使用_来占位
_,b=getPoint()
不要x了,只要y,把y赋值给b即可。
一个通用的编程原则:一个函数只做一件事!
第一个版本,既做了计算,又做了打印(和用户交互)
第二个版本,只是做了计算,不关心如何和用户交互~
一旦后续需要改变和用户的交互方式,第二种写法就更有优势(不必修改代码了)
让逻辑和交互/界面分离,进一步的好处解耦合。
一个稍微复杂的程序中,经常会涉及到很多的模块,模块之间可能要进行交互,交互就会带来耦合,当然希望通过良好的设计让耦合尽量低。