函数可重复使用的代码块 简单的来说:就是将我们常用的语句起了一个名字 每次调用名字就可以执行这些语句;

函数定义:

使用关键字 def语句 创建函数

def  sayHello():
 print("Hello World!");

调用定义的函数直接使用函数名即可

sayHello();

输出结果:
 Hello World!

如果函数有多个返回值如:

def remainder(a,b): #a,b 叫做形参 
 q = a//b #取商
 r  = a-q*b
 return (q,r);
res ,res2 = remainder(24,6); #传递进函数的叫做实参
print(res,res2);

输出结果:
4 0

函数参数可以提供默认值  可以使用一下的方法:

def setData(name,age = '18'):
 print(name+"你好,您已满"+age+"可以注册这个游戏!");
setData("呼延灼");

输出结果:
呼延灼你好,您已满18可以注册这个游戏!


还有一种方法 可以不考虑参数顺序

setData(age= 22,name = '春瑞')

输出结果:
春瑞你好,您已满22可以注册这个游戏!

在函数中创建变量,作用域都是局部的 如果要在函数内部修改全局变量则可使用global语句

count = 10;
def num():
 global count;
 if(count<=10):
   count += 1;
 print(count);
  
num()
print(count);

输出结果:
11
11

如何在函数中打印文档使用系统特殊属性__doc__:

def  myData(name):
 '这是一个关于提取我个人信息的方法';
 print('我叫'+name);
myData('史进');
print(myData.__doc__);

输出结果
我叫史进
这是一个关于提取我个人信息的方法

搜集参数 参数前加* 表示搜集其余的位置参数 如果不提供任何搜集的元素 搜集参数为空元组

def Demo(*param):
 print("参数长度是:",len(param),"参数中称号是:", param[1]);
Demo(1,'及时雨','宋江','天魅星');

输出结果:
参数长度是: 4 参数中称号是: 及时雨

使用搜集参数时 如果有额外的参数需要传递,则使用一下方法:

def Demo(*param,book):
 print("参数长度是:",len(param),"参数中称号是:", param[1],'人物来源于',book);
Demo(1,'及时雨','宋江','天魅星',book="水浒传");

输出结果:
参数长度是: 4 参数中称号是: 及时雨 人物来源于 水浒传

内嵌函数的使用 (函数嵌套):

def fun1():
  print("fun1()正在被调用...");
  def fun2():
   print("fun2() 正在被调用...");
  fun2();
fun1();

输出结果:

fun1()正在被调用...
fun2() 正在被调用...

闭包由函数嵌套形成,是在一个函数的代码块中(局部变量)中定义的  通过return方法返回内部函数的名称从而形成闭包

def funX():
  print('funX()正在被调用...');
  def funY():
   print('funY()正在被调用...');
  return funY; 
funZ = funX();
funZ();

 

输出结果:

funX()正在被调用...
funY()正在被调用...

python中使用闭包如果需要传值的情况下:

def  fun1(x):
 def fun2(y):
  print(x*y);
 return fun2;
f = fun1(4);
f(6);

输出结果:

24

python闭包中如果需要对非全局局部变量进行赋值 需要使用nonlocal关键字

def  fun1():
 x = 5;
 def fun2():
  nonlocal x;
  x *=x;
  print(x);
 return fun2;
f  = fun1();
f();

输出结果:

25

总结

    1,定义函数:def funname();

        2,函数调用 如果有多个返回值 则可通过元组的形式接收

        3,函数实参形参的区别

        4,函数的不同调用方式:不考虑参数顺序调用

        5,系统特殊属性 打印函数中的字符串信息:myData.__doc__

        6,搜集参数:*param  搜集多个参数 注意:如果有额外的值需要带有参数名

        7,内置函数(内嵌函数)的使用:两个函数相互嵌套形成

        8,闭包函数的使用:定义在函数代码块中的函数,通过返回函数的名称进行调用  关键字return 

    9, 在局部作用域改变全局变量的值:global关键字  在内嵌函数或者闭包中改变非全局局部变量的值:nonlocal关键字