1.print() 和 return 辨析
我们把函数的返回值叫输出,print() 函数打印出来的也叫输出。
return是python的关键字,只能再函数内使用,再函数内不直接显示数据内容,可以将结果传到函数外使用。
print是函数,再函数内直接打印数据内容,打印完就销毁结果。
注:关键字 也叫保留字,是指 Python 中有特定含义的单词,比如 return、def、and 等,并且我们定义的变量名不能与 Python 中的关键字重名。
return 的使用范围仅限于函数内,功能也只有把函数内部的运行结果交付给外界的代码,具体要怎么用,交给外部决定,可以在外面打印、参与后续计算等。print() 只有把结果显示出来给你看的意思,看完就丢,显示在屏幕上之后就没了,不能参与函数外面的运算。
def sum1(x):
y = x * 66
def sum2(x):
y = x * 66
return y
y1 = sum1(1) # y1 的值为 None
y2 = sum2(1) # y2 的值为 2
print(y1) # 输出:None
print(y2) # 输出:2
#最后两行用 print() 打印出的内容才能显示出来,而return 没有这个功能。
2.if......else
if ... else 语句是最基本的条件语句。
if + 条件 和 else 后面接的 英文冒号:,if 分支和 else 分支的代码都需要加缩进,用于表示它们在 if 和 else 的管辖之内。
a = 6
b =8
if a > b:
print('a > b')
else:
print('a ≤ b')
输出:
a ≤ b
判断完毕
Python 中等号的含义和我们在数学中接触的不一样,单个等号 = 的意思是给变量赋值,双等号 == 才是判断相等,我们可以用它来检验字符串是否一致,也可以用它来判断数值大小是否相同。
a=888
if a==888:
print('密码正确')
else:
print('密码错误')
输出:
密码正确
if 后面跟的条件,都是判断双等号 == 两边的数据是否相等。像双等号 == 这样用来判断数值关系的符号,在 Python 中也叫 比较运算符。
Python 中常用的比较运算符有下面这几种:
== 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
计算机是怎样判断 if 后面接的条件是否成立的呢?
这靠的是一种特殊的数据类型:布尔类型。
3.布尔类型
True 表示肯定含义,False 表示否定含义。在编程世界里,我们一般称 True 为 真,False 为 假。
这两个用来代表“真”与“假”的值就是我们所说的 布尔类型。布尔类型的值,也称 布尔值,只包括 True 和 False 两种,专门用来回答编程中 是与非 的问题。
对于那些用比较运算符写出来的条件表达式,Python 会自动判断条件是否成立,然后将条件表达式转换成布尔值:
满足条件时,条件为真,判断结果为 True;
不满足条件时,条件为假,判断结果为 False。
print(7 >= 1)
# 输出:True
print(1 > 3)
# 输出:False
print('Python' == 'python')
# 输出:False
由于判断结果只有两种(条件为真、条件为假),所以,条件表达式的值也只有 True 和 False 两种。打印条件表达式,结果要么是 True,要么是 False。
这说明 条件表达式本身就是一个布尔值。正因为此,条件表达式也叫 布尔表达式。
我们可以直接把 True 或 False 的值存到变量里,告诉 Python 某件事有没有发生:
# 今天是周末吗?
is_weekend = True
# 今天去购物了吗?
is_shopping = False
用来保存布尔值的变量,叫作 布尔变量。除了用 True 和 False 直接创建布尔变量之外,还可以通过 条件表达式 来定义布尔变量。
小牛想要买个6000 元的电脑,他想看一下自己目前的存款(8000 元)够不够,那就可以把比较结果存到变量 enough 里:
money = 8000
price = 6000
# 小牛的存款够买一台电脑吗?
enough = money >= price
print(enough)
# 输出:True
注意 enough = money >= price 这行代码,出现的第一个等号 = 是赋值的意思,后面跟的条件表达式 money >= price 作为一个整体被赋值给变量 enough。
if 语句中写的条件表达式,也叫布尔表达式,本质上都是布尔值 True 或 False。
money = 8000
price = 6000
# 判断:小牛的存款够买一台电脑吗?
if money >= price:
print('够!')
else:
print('不够不够')
# 输出:够!
if 分支的代码只有在条件成立时才会执行,换句话说,只有 if 后面的表达式结果为 True 时才会执行。
else 分支只在条件不成立时执行,这时条件表达式为 False。
执行哪一条的大权,就在 if 的手里,True 和 False 就是条件分支判断的唯一根据。
很显然,money >= price 的值是 True,if 后面跟的条件为真。
下面这段代码,请看看能不能自己理清楚 if ... else 内部的执行机制呢?
is_shopping = True
if is_shopping:
print('疯狂购物')
else:
print('在家躺平')
# 输出:疯狂购物
这个例子和我们之前写的 if ... else 语句看起来不太像:写在 if 后面的判断条件,不是条件表达式,而是一个布尔值。
但是内部原理却是一模一样的。无论判断条件是布尔值还是布尔表达式,if 都是根据判断条件是 True 还是 False 来决定进入哪一个分支。
if is_shopping: 这句代码里,if 后面跟的是变量 is_weekend。 is_shopping值为 True,这就说明条件为真,结果当然是执行 if 分支的代码,打印出 疯狂购物 咯。
如果我们给 is_shopping 赋值为 False,那执行的就是 else 分支的代码,最终打印出 在家躺平。
###Python 中有一种特殊的数据类型:布尔类型,它只有两个值,True 为真,False 为假,条件表达式的本质就是布尔值;
if 根据其后跟的是 True 还是 False 来决定执行哪些代码,True 则执行 if 分支,False 则执行 else 分支。
4.布尔类型的转换
Python 中所有的数据类型,都可以用 bool() 函数转换为布尔值。
print(bool(0))
# 输出:False
print(bool(0.0))
# 输出:False
print(bool(1))
# 输出:True
print(bool(123))
# 输出:True
print(bool(-1))
# 输出:True
print(bool(-123.0))
# 输出:True
整数 0, 1, 123, -1 和浮点数 0.0, -123.0 的转换结果,可以发现,除了 bool(0) 和 bool(0.0) 的转换结果是 False 之外,其他数字的转换结果都是 True。
True 和 False 用于表示数据的 有 和 无。0 和 0.0 都代表着“什么都没有哦”,所以,它俩会被转换成 False,而其他不等于 0 的数据,无论是正数还是负数转换结果都是 True。
下面看看字符串转换的结果:
print(bool(''))
# 输出:False
print(bool(' '))
# 输出:True
print(bool('0'))
# 输出:True
print(bool('ab'))
# 输出:True
提示:注意 '' 和 ' ' 的区别。前者是空字符串,后者引号里有一个空格。
只有完全为空的字符串 '' 才会转换成 False,其他字符串,无论是 ' ' 还是 '0',都包含了至少一个字符,就说明它们不是完全空的,转换结果均为 True。
综合字符串、整数和浮点数的转换结果,你能看出其中的转换规律吗?0,'' 代表“什么也没有”,转换结果都是 False,其它都是 True:
另外,无 return 函数会默认返回一个 None,它也会被转化为 False。
利用 数据可以转换成布尔类型 这个特点,我们可以用 if 语句很方便地检查某个数据是否为 0 或为空,具体做法是,把这个数据接在 if 后面作为判断条件,案例:
data = ''
if data:
print(data)
else:
print('这是个空字符串')
# 输出:这是个空字符串
这段代码里也没有出现 True 或 False 这样的布尔值啊,if 是怎么完成判断的呢?
我们通常会在 if 后面接布尔值作为 if ... else 语句的判断条件,不过,即使接在 if 后面的不是布尔值而是具体数据,条件判断也是可以完成的。
原因在于,if 会强制对其后的数据执行布尔类型转换,我们完全可以把 if data: 理解成 if bool(data):。
不管 data 的内容是什么,经过转换后只有两个结果:True 或 False,这样 if 就能“拿到”True 或 False 作为执行代码的判断依据啦。
如果 data 中的数据不为 0 也不为空,那转换后的结果就是 True,Python 就会执行 if 分支的代码,否则就执行 else 分支的代码。