在给函数传递参数的时候可以分为不可变类型和可变类型,这就类似与C++的按值传递和按引用传递,其中可变类型能在定义的函数体内改变值,但是不可变类型是即使你在函数体内修改了改值,在这函数体外部也不会改变,其本质是在传递该参数的时候复制了一个变量,这个变量指向实际的值。
不可变类型
常见的不可变类型有整数、字符串、元组。
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print (b) # 结果是 2
查了下资料,如果是不可变类型的话,他就是不可变的,没有办法让他在函数体外更新值,但是!!!你可以把他变为可变类型。
还要一种方式就是你可以设一个返回值,将返回值赋给这个值。
可变类型
常见的可变类型有列表和字典
def ChangeInt( a ):
a[0] = 10
b = [2]
ChangeInt(b)
print (b[0]) # 结果是 10
传参的参数
必备参数
def printme( str ):
"打印任何传入的字符串"
print (str)
return
printme() #报错
如果定义的函数体内需要参数,则一定要传对应数量的参数
关键字参数
def printinfo( name,age = 35):
"打印任何传入的字符串"
print ("Name: ", name)
print ("Age ", age)
return
printinfo( age=50, name="miki" )
printinfo( name="miki" )
这说明了参数的顺序并不重要,可以自己规定顺序
默认参数
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
printinfo( age=50, name="miki" )
printinfo( name="miki" )
这跟C++中的默认参数一样,没传改参数的话,默认采用原先定义的参数。
跟C++一样,默认参数位置应该在参数列表的尾部,不能def printinfo( age = 35,name):这样定义,会报错。
不定长参数
def printinfo( arg1, *vartuple ):
print ("输出: ")
print (arg1)
for var in vartuple:
print var
return
printinfo( 10 )
printinfo( 70, 60, 50 )
加了星号(*)的变量名会存放所有未命名的变量参数。
全局变量和局部变量
global_var=0
def test():
#print(global_var) #报错,在函数体内找不到这个值
global_var=1
print(global_var) #1
test()
print(global_var) #0
global_var=0
def test():
global global_var #将该变量声明为全局变量
global_var=1
print(global_var) #1
test()
print(global_var) #1