源代码:
def main(w_face,w_body):
return("我的身材:"+face(w_face)+body(w_body))
#main('青青','子衿')
print(main('青青','子衿'))
def face(name):
return(name+'脸蛋')
def body(name):
return(name+'身材')
报错:
line 2, in main
return("我的身材:"+face(w_face)+body(w_body))
NameError: name 'face' is not defined
遵循函数先定义,后调用的原则,改动如下:
正解:
def face(name):
return(name+'脸蛋')
def body(name):
return(name+'身材')
def main(w_face,w_body):
return("我的身材:"+face(w_face)+body(w_body))
#main('青青','子衿')
print(main('青青','子衿'))
#》》我的身材:青青脸蛋子衿身材
结语:类比C语言:函数的实参是“单向值”传递给形参。
- return的一个特别的用法,我们看到前面所有的return语句,都是返回1个值,如果要返回多个值,我们该怎么办呢?
看这段代码:
def face(name):
return name + '的脸蛋'
def body(name):
return name + '的身材'
print('我的身材:'+face('古天乐') +' + ' + body('孔明'))
在这段代码中,我们定义了两个函数,每个return语句分别返回关于“脸蛋”和“身材”的值。如果要一次性返回这两个值,我会这样做,先看代码:
def lover(name1,name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face,body
a=lover('古天乐','孔明')
print('我的身材:'+a[0]+' + '+a[1])
#》》我的身材:古天乐的脸蛋 + 孔明的身材
为什么要这样写,第7行代码是啥意思?怎么看上去像是列表?你大概有这样的疑惑了吧?
我们先来看看,一次性返回的两个值,是什么数据类型。
def lover(name1,name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face,body
a=lover('古天乐','孔明')
print(a)
#》》('古天乐的脸蛋', '孔明的身材')
是 (‘古天乐的脸蛋’, ‘孔明的身材’) 这样一个元组,对不对?
事实上,Python语言中的函数返回值可以是多个,而其他语言都不行,这是Python相比其他语言的简便和灵活之处。
一次接受多个返回值的数据类型就是元组
。
而元组与列表其实都是数据的“序列”,元组取某个位置的值的操作,与列表是一模一样的,即tuple[]。也是因此,我们会这样去写代码:
def lover(name1,name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face,body
a=lover('古天乐','孔明')
#此时return的值为元组 a = ('古天乐的脸蛋', '孔明的身材')
print('我的身材:'+a[0]+' + '+a[1])
#》》我的身材:古天乐的脸蛋 + 孔明的身材
最后需要再强调的是,没有return语句的函数会默认返回None值。观察结果。
#第一个函数
def fun():
a ='I am coding'
print(fun())
#第二个函数
def fun():
a='I am coding'
return a
print(fun())
#》》
None
I am coding
第一个函数因为没有return语句,返回None值,所以打印出None。
此外,return还有一个“副作用”:一旦函数内部遇到return语句,就会停止执行并返回结果。
def fun():
return 'I am coding.'
return 'I am not coding.'
print(fun())
#》》I am coding.
函数内部遇到第一个return就会返回,所以只会打印出’I am coding’。