函数续讲:
1.函数返回值
def test01(): pass def test02(): return 0 def test03(): return 0,10,'hello',['alex','1b'],{'wu':'1b'} t1 =test01() t2 =test02() t3 =test03() print('from test01 return is [%s]'%type(t1),t1) #如果没有返回值 python默认为none print('from test01 return is [%s]'%type(t2),t2) #返回值是整数 print('from test01 return is [%s]'%type(t3),t3) #返回值是多项数值,则是返回类型是元组
2.函数调用:
调用方法:
1. test()执行,()表示调用函数test,()内可以有参数也可没有
参数:
1.形参和实参
1.形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。
2. 位置参数和关键字(标准调用:参数与形参位置一一对应;)
3. 默认参数
4. 参数组
3.前向引用
函数action体内嵌套某一函数logger,该logger的声明必须早于action函数的调用,否则报错
4.非固定参数
当你在函数定义时不确定用户想传入多少个参数,就可以使用非固定参数
def stu_register2(name,age,*args,**kwargs):#**kwargs 会把多传入的参数变成一个字典的形式 # print(name,age,args,kwargs) stu_register2('xin',22) stu_register2('opp',90,'zhou',900,sex='opop',o='popo')#注意,传入kwargs的必须是关键参数
def stu_register(name,age,*args): #*args会把多传入的参数变成一个元组形式 print(name,age,args) stu_register('xin',22) stu_register('yang',22,'cn',"python","go")
5. 全局与局部变量
在(子程序)或函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量的作用域是整个程序;
局部变量的作用域是定义该变量的子程序;
name = "jay" def change_name(name): print("before change:",name) name = "jay chou" print("after change",name) #改了 jay chou change_name(name) print('看看name改了吗?',name) #没改
当全局变量与局部变量重名时:
在定义局部变量的子程序内,局部变量起作用;在其他其他地方全局变量起作用。
song = '霍元甲_全局' def change_song(song): song = '周大侠_局部' print('在函数内是局部还是全局呢',song) change_song(song) print('在外面是局部还是全局呢?',song)
浙公网安备 33010602011771号