一,函数是什么?
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
1.减少代码的重复性
2.代码的可扩展性
3.代码的易维护性
语法定义
def sayHello():
print(‘hello,i‘m good boy)
sayHello()
也可直接传入参数
def add(x,y):
res = x+y
return res
result = add(3,5)
print(result)
二,函数参数
形参变量只有在调用时才会被分配内存单元,调用结束时就释放内存,也就是说,形参变量不调用时是不会占用任何内存的。因此,形参只能在函数内部有效。
实参可以是常量,变量,表达式,函数等,但是在函数调用时,它必须有确定的值以便传给形参。
函数传递的四种方式
1.位置传递
def info(name,age,sex): return ‘有一位新人名字叫%s,今年%s,性别%s‘%(name,age,sex) print(info(‘mingo‘,23,‘男‘))
按照位置一一对应进去,多个或少一个实参都会报错
2.关键字传递
def info(name,age,sex): return ‘有一位新人名字叫%s,今年%s,性别%s‘%(name,age,sex) print(info(name=‘mingo‘,sex=‘男‘,age=23))
关键字传递无顺序,只要你的名字对了就行,但要注意一点的就是,关键字参数不能出现在位置参数的前面
例如:
def info(name,age,sex): return ‘有一位新人名字叫%s,今年%s,性别%s‘%(name,age,sex) print(info(name=‘mingo‘,sex=‘男‘,23))
3.默认传递
def info(name,age,sex=‘女‘): return ‘有一位新人名字叫%s,今年%s,性别%s‘%(name,age,sex) print(info(name=‘mingo‘,age=23))#sex不写默认女 print(info(name=‘mingo‘,sex=‘男‘,age=23))#sex写会覆盖默认的值
4包裹传递(不确定用户想传入多少个参数时使用)
def info(*args): print(args) print(type(args)) info(1,2,4,‘a‘,‘mingo‘,21,‘nan‘) 打印结果 (1, 2, 4, ‘a‘, ‘mingo‘, 21, ‘nan‘) <class ‘tuple‘>
args会收集传递进去的参数并变成元组的形式,args只是一个规范的名称,可以改其它名称,例如*aa
def info(**kwargs): print(kwargs) print(type(kwargs)) info(name=‘mingo‘,age=21,sex=‘nan‘) 打印结果 {‘name‘: ‘mingo‘, ‘age‘: 21, ‘sex‘: ‘nan‘} <class ‘dict‘>
kwargs会接受key-value形式的参数并变成字典的形式
def info(*args,**kwargs): print(args) print(kwargs) info(1,2,name=‘mingo‘,age=21,sex=‘nan‘) 打印结果 (1, 2) {‘name‘: ‘mingo‘, ‘age‘: 21, ‘sex‘: ‘nan‘}
以上多种形式可以配合着使用,如果有机会看到的小伙伴还是自己多动手试一试吧,我就不贴出代码了
三,局部变量
name = "Mingo" def change_name(name): print("before change:", name) name = "明哥,一个买不起房的男人" print("after change", name) change_name(name) print("在外面看看name改了么?", name) 打印结果 before change: Mingo after change 明哥,一个买不起房的男人 在外面看看name改了么? Mingo
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
要想修改全局变量只能在内部调用global,改全局变量有待商榷,不敢肆意为之。
四,返回值
相信很多人对return产生了疑问?
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
所以,有什么卵用呢?看你的需求了。