定义一个函数:
def 函数名(形参表): 函数体
不用声明形参类型、函数返回值类型,return 语句返回什么就是什么类型。
return语句会终止函数的执行。 return None 、 return 、没有return语句,均表示返回值为None(相当于java、c/c++中的void)。
调用一个函数:
函数名(实参表)
示例:
def sum(a,b): #定义一个函数 return a+b result=sum(1,2) #调用一个函数 print(result)
在 python 中,类型是属于值的,变量是没有类型的。比如:
a=[1,2,3] b="Runoob"
List 类型说的是值[1,2,3] ,字符串类型说的是值"Runoob" 。
变量 a 、b是没有类型的,它们仅仅是一个引用(指针),可以是指向 List 类型的对象,也可以指向 String 类型的对象。
python中函数的传参方式:
-
不可变类型:类似 c++ 的值传递,将实参的值copy一份赋给形参,实参不会被修改。
-
可变类型:类似 c++ 的引用传递,将实参的引用传递给形参,对形参的修改其实就是对实参的修改
参数传递形式:
def outInfo(name,age): print(name,age) outInfo("张三",20) #实参表的顺序和形参表的顺序相同 outInfo(age=18,name="李四") #通过形参名来指定对应的实参,参数顺序随意
默认参数值:
def outInfo(name,age=20): #有默认值的参数要放在形参表的最后面 print(name,age) outInfo("张三",10) #使用指定的age outInfo("李四") #缺省时使用默认值
参数个数不确定的函数:
def outInfo(name,*other): #参数个数不确定,形参名前加*,放在形参表的最后,会作为一个参数来传递(元组形式) print(name,other) outInfo("张三") #0个 outInfo("李四",18) #1个 outInfo("王五",18,99) #多个 """ 张三 () 李四 (18,) 王五 (18, 99) """
匿名函数:
python 使用 lambda表达式 来创建匿名函数。语法:
变量=lambda 形参表:表达式|语句
形参表不加(),通过变量名来调用匿名函数。
sum=lambda a,b:print(a+b) #sum其实相当于函数名 sum(1,2) #输出3,没有返回值,或者说返回值是None sum=lambda a,b:a+b #lambda表达式不能写return语句,如过冒号后面是一个表达式,则返回这个表达式的值 print(sum(2,3)) #5
- lambda 只是一个表达式
- lambda的主体只能是一个表达式|语句
- 匿名函数适合函数体很小的函数(因为冒号后面只能写一个表达式|语句,且必须写在同一行)
函数的嵌套定义
在python中,函数是可以嵌套定义的。
def father(): print("start") def son(): #嵌套的函数不会自动执行,需要调用才会执行 print("son") print("over") father() """ start over """
def father(): print("start") def son(): #嵌套的函数不会自动执行,需要调用才会执行 print("son") def son() #调用嵌套的函数 print("over") father() """ start son over """
def father(): print("start") def son(): print("son") def grandSon(): print("grandSon") grandSon() son() #调用嵌套的函数 print("over") father() """ start son grandSon over 函数只能在上一级的程序单元中调用,不能在其他地方调用。(函数也有作用域) 比如grandSon()只能在son()的函数体中被调用,不能在其他地方被调用 son()只能在father()的函数体中被调用,不能在其他地方被调用 """
python是解释型的语言,是从上往下依次解释执行的,所以函数、变量必须先定义,再使用。
Python 变量的作用域
i=1 #全局作用域,全局可用 def father(): print(i) #可用 j=1 #只在father()内可用 def son(): #嵌套的函数不会自动执行,需要调用才会执行 print(i) #可用 print(j) #可用 k=1 #只在son()中可用