# 自定义函数
def printme(str):
print(str)
return
# 调用函数1
printme("我调用我自己")
printme作为自定义函数,str为参数,自定义函数内部的print(str)执行将参数打印的操作,最后以return结尾。
def中的参数分不可变类型与可变类型
strings\tuples\numbers是不可变类型
list\dict等是可变类型
# 不可变类型
def ChangeInt(a):
a = 10
b = 2
ChangeInt(b)
print(b) # 结果是 2
可以看到b作为一个numbers,在b传入参数传入后不发生改变。
# 可变类型1
def changec(c):
c[2] = 1
return
cc = [3, 3, 3]
changec(cc)
print(cc)
可以看到cc作为一个list,在传入c后发生了改变,结果为3,3,1。这里做了一个实验当内部函数c[2]=1改为c=[1, 1, 1]时,函数不发生改变,小伙伴们感兴趣可以解释下为什么。
# 可变类型2
def changeme(mylist):
"修改传入的列表"
mylist.append([1, 2, 3, 4])
mylist[2] = 55
print("函数内取值: ", mylist)
return
# 调用changeme函数
mylist = [10, 20, 30]
changeme(mylist)
print("函数外取值: ", mylist)
这里append的作用是在矩阵的右边增加[1, 2, 3, 4]矩阵,这里也是同样道理,最终输出结果为
函数内取值: [10, 20, 55, [1, 2, 3, 4]]
函数外取值: [10, 20, 55, [1, 2, 3, 4]]
def中的参数可自动匹配
# 参数名匹配参数值
def printme(str):
"打印任何传入的字符串"
print(str)
return
# 调用printme函数
printme(str="My string")
这里是参数名匹配参数值的原则,设定参数为str后,可打印str=“XXX”,python会自动识别。
# 参数顺序不重要
def printinfo(name, age):
"打印任何传入的字符串"
print("Name: ", name)
print("Age ", age)
return
# 调用printinfo函数
printinfo(age=25, name="wly")
参数的顺序对于传递不重要,这里颠倒顺序后python自动纠正。
def中的参数可赋初值
# 默认参数在有初始值幅值的情况下可缺省
def printinfo1(name, age=25):
"打印任何传入的字符串"
print("Name: ", name)
print("Age ", age)
return
# 调用printinfo函数
printinfo1(name="wqr")
当有初始值赋值时,可缺省参数,若均有初始值赋值,可传递空。
def中的不定长参数
# 不定长参数
def printinfo(arg1, *vartuple):
"打印任何传入的参数"
print("输出: ")
print(arg1)
for var in vartuple:
print(var)
return
# 调用printinfo 函数
printinfo(10)
printinfo(70, 60, 50, 40)
不定长参数用*XXX来表示,此时调用函数时可大于参数个数的任意数。for的作用是在vartuple的元素个数内循环打印,结果是
输出:
10
输出:
70
60
50
40
# 匿名函数只能包含一个语句lambda [arg1 [,arg2,.....argn]]:expression
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为 : ", sum(10, 20))
print("相加后的值为 : ", sum(20, 20))
lambda是匿名函数定义如下
lambda [arg1 [,arg2,.....argn]]:expression
作者:有情有义又是有米无炊