Python中函数以def关键词开头,后接函数标识符名称,圆括号括起来的参数列表,冒号。函数体内的return如果不带表达式或者没有return相当于返回None。函数体最前面可以使用字符串描述函数功能。
def add(n1,n2):
"这是一个加法函数"
return n1+n2
def add(n1,n2):
"""
这是一个加法函数
:param n1:
:param n2:
:return:
"""
return n1+n2
Python中函数参数是引用传递,对于不可变类型,因为不能修改只能新建,所以不会影响到变量自身,而对于可变类型,则会影响到变量自身。
def testFunc1(str):
print(id(str))
str+="123"
print(id(str))
value="test"
print(id(value))
testFunc1(value)
print(id(value))
print(value) # test
value=['t','e','s','t']
print(id(value))
testFunc1(value)
print(id(value))
print(value) # ['t', 'e', 's', 't', '1', '2', '3']
结果:
1464254630688
1464254630688
1464254630800 # 新建了一个字符串
1464254630688
test
1464254096008
1464254096008
1464254096008
1464254096008
['t', 'e', 's', 't', '1', '2', '3']
使用关键字参数允许函数调用时参数的顺序与声明时不一致,在函数调用中,关键字参数必须跟随在位置参数的后面。
def testFunc(value1,value2):
print(str(value1)+" "+str(value2))
testFunc(value2=10,value1=100) # 100 10
testFunc(100,value2=10) # 100 10
testFunc(value2=10,100) # 错误
使用独立星号限制后面的参数必须使用关键字参数传递。
def testFunc(value1,*,value2):
print(str(value1)+" "+str(value2))
testFunc(value1=100,value2=10) # 100 10
testFunc(100,value2=10) # 100 10
testFunc(10,100) # 错误,testFunc() takes 1 positional argument but 2 were given
调用函数时,如果没有传递参数则会使用默认参数。
def testFunc(value1,value2=200):
print(str(value1)+" "+str(value2))
testFunc(10) # 10 200
如果参数数量不是固定的,可以在参数前面加上星号,传递的参数将被看作是元组,如果参数前面有两个星号,则传递的参数被看作是字典。
def testFunc(*arguments, **keywords):
print(arguments)
print(keywords)
testFunc(1,2,3,"abc",red="红色",green="绿色")
结果:
(1, 2, 3, 'abc')
{'red': '红色', 'green': '绿色'}
Python使用lambda关键字创建匿名函数,格式如下,lambda的主体是一个表达式,只能写一行。
lambda [arg1 [,arg2,.....argn]]:expression
addFunc=lambda n1,n2:n1+n2
print(addFunc(1,2))
网友评论