- 关于return和print()
上一节中,我们学习了用return来返回一个结果。初学时,可能搞不清return和print()到底该用哪一个。我们首先要理解返回一个值的意思:
上一节中,我们定义了my_abs函数:
def my_abs(x): if x >= 0: return x else: return -x
现在,我们定义另一个函数my_abs2:
def my_abs2(x): if x >= 0: print(x) else: print(-x)
我们将二者保存后运行:
>>> my_abs(-666) 666 >>> my_abs2(-666) 666
好像是一样的嘛?不过,我们再进一步:
>>> my_abs(-666) + 1 667 >>> my_abs2(-666) + 1 666 Traceback (most recent call last): File "<pyshell#6>", line 1, in my_abs2(-666) + 1 TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
注意到,第二个函数,首先打印出了666,然后报了一个错。报错提示说:Python不支持一个叫做NoneType的东西和整数(int)进行运算。
在Python中,有一种特殊的数据类型称为NoneType,这类数据只有一个值None,它不支持任何运算,也没有任何方法可以调用。简单来说,这种数据类型就意味着啥也没有。
函数my_abs2()的定义中没有return命令,Python默认该函数返回的结果是None;None无法和整数1进行运算。
因此,我们要根据程序后期是否需要用到函数返回的结果等条件,来判断选择return还是print()。
- 还是关于return和print()
我们对上述两个函数的定义修改如下:
def my_abs(x): if x >= 0: return x else: return -x print('没了') def my_abs2(x): if x >= 0: print(x) else: print(-x) print('没了')
保存并执行:
>>> my_abs(-666) 666 >>> my_abs2(-666) 666 没了
在Python中,return语句在返回结果的同时,将退出函数。print()则没有这个功能。
- 函数一定要传入参数嘛?
目前为止我们使用的函数都要求传入参数——函数名称后面的括号里都要填点什么。如果一个函数的法则,不需要作用于任何对象,那么这个函数可以不要参数。例如,我想讲一个生成1-100随机数的功能封装进一个函数random_num,我可以做如下定义:
>>> def random_num(): import random return random.randrange(1, 101) >>> random_num() 63 >>> random_num() 13
- 文档字符串(docstring)
我们在交互界面输入help(),括号内填入任意的Python内建函数名称,会得到关于该函数的一般说明:
>>> help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container.
Python的函数允许其作者在定义的第一行使用一个字符串,当该函数名称被help()调用时,显示这个字符串作为该函数的说明。比如,我们还是用我们的绝对值函数:
def my_abs(x): '返回参数x的绝对值' if x >= 0: return x else: return -x
保存并运行,然后我们利用help(my_abs)就可以查看到我们写的说明了:
>>> help(my_abs) Help on function my_abs in module __main__: my_abs(x) 返回参数x的绝对值
这种开头写的字符串,我们给他起个名字叫文档字符串(docstring),这是个好习惯~ 可以让别人大致明白你这个函数是干嘛的。
- 反复调用函数*
本章第8节我们改写过一个摄氏度与华氏度转换的程序:
try: temp_C = eval(input('请输入现在的摄氏温度:')) temp_F = temp_C * 1.8 + 32 print('当前温度为华氏', temp_F, '度', sep = '') except: print('请用阿拉伯数字输入温度')
你会发现,当用户运行这个模块时,如果用户真的输入了汉字,在得到错误提示后,程序就结束了。用户需要重新运行该模块才能更正输入。我们把这个模块用函数的方法改写一下:
def temp(): #这个函数不需要参数 try: temp_C = eval(input('请输入现在的摄氏温度:')) temp_F = temp_C * 1.8 + 32 print('当前温度为华氏', temp_F, '度', sep = '') except: print('请用阿拉伯数字输入温度') return temp() # 当用户输入错误,先打印提示信息,再重新运行这个函数 temp() #调用该函数
保存这个模块并运行:
=================== RESTART: C:\Users\MSI\Desktop\demo.py =================== 请输入现在的摄氏温度:一度 请用阿拉伯数字输入温度 请输入现在的摄氏温度:亮度 请用阿拉伯数字输入温度 请输入现在的摄氏温度:3 当前温度为华氏37.4度 >>>
瞬间就更人性化了呢!
- 本节练习
改写本章第八节中的练习题答案,使得用户任何时候输入错误都可以继续游戏。
=================== RESTART: C:/Users/MSI/Desktop/demo.py =================== 谜底是1-100间的整数,请输入您的答案...:二十 请输入纯阿拉伯数字啦... 谜底是1-100间的整数,请输入您的答案...:就不 请输入纯阿拉伯数字啦... 谜底是1-100间的整数,请输入您的答案...:咬我呀 请输入纯阿拉伯数字啦... 谜底是1-100间的整数,请输入您的答案...:55 您猜大啦
看答案
import random answer = random.randrange(1, 101) def guess_num(): '该函数用于猜数字游戏中对用户输入的数字与答案作比较,并给出相应提示' try: num = eval(input('谜底是1-100间的整数,请输入您的答案...:')) except: print('请输入纯阿拉伯数字啦...\n') #\n是换一行,方便用户看清 return guess_num() while num != answer: if num > answer: print('您猜大啦\n') return guess_num() elif num < answer: print('您猜小啦\n') return guess_num() print('猜对啦!答案是:', answer, sep = '') guess_num()
酱哦
如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~