Python——函数
- 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
- 函数的第一行可以选择性使用注释来存放函数说明
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数。不带表达式的return相当于返回None。
参数传递
学过c语言的人都知道,函数的传参分为形参和实参。传入形参只是传入值而不是内存地址,所以相应变量的值不会被改变;而实参传递的是内存地址,函数内部对其进行改变后,相应地址的值也会被改变。
python中,将参数分为可更改(mutable)与不可更改(immutable)对象。
list, dict是可以更改的对象;string, tuples, numbers是不可更改的对象
- 传递不可变类型类似于C的值传递,如整数、字符串、元组。传递的只是值,函数内部修改的只是传入变量所复制的另一个对象,不会影响传入变量的本身。
- 传递可变类型类似于C的引用传递,如列表、字典。函数内部修改传入变量后,在外部变量也将改变。
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
def changeNum(a,b):
t = a
a = b
b = t
return
num1 = 1
num2 = 2
changeNum(num1,num2)
print(num1)
def changeList(list1,list2):
list1.append(list2.pop())
return
list1 = [1,2,3,4]
list2 = [5,6,7,8]
changeList(list1,list2)
print(list1)
print(list2)
结果:
参数
- 关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。
def printinfo( name, age ):
"打印任何传入的字符串"
print ("Name: ", name)
print ("Age ", age)
return
printinfo( age=50, name="miki" )
结果:
- 默认参数
注意:python中的默认参数与c中的不同,默认参数必须从括号右侧往左依次排列。如下图像c一样从左存放则报错。
def fun(age, name = "小明"):
print("age:",age)
print("name:",name)
return
fun(11)
结果:
- 不定长参数
当需要一个函数来处理比当初声明时更多的参数,这些参数叫不定长参数,存储在加了* 的参数中,以元组形式存在。
def printinfo(arg1,*vartuple):
print(arg1)
print(vartuple)
return
printinfo(10,23,14,35,64)
结果:
|