前提回顾
我们在《笨办法学 python3》系列练习的 37 题遇到了 Zed 为我们总结了一些重要的知识点让我们复习、学习。
本文系列练习使用 python3.6 作答,并非目前中文版的 python2 。以下为我对关键字(准确的说其中还包含了一些内置函数)部分的答案
我的答案
如何查看当前版本的关键字
虽然说关键字一般还是很稳定的,不过也有可能在某个版本做添加,我们可以在命令符界面这样查看当前版本中的关键字以及其用法、文档。
# 查看关键字
help("keywords")
# 查看 def 的文档
help("def")
and
or
not
关键字
这几个关键字我们是在 27.记住逻辑关系 首次遇到它,属于复习的内容,分别表示逻辑中的”与、或、非“的概念。
and
的作用是在布尔表达式中表示“与”的关系,and
两边都是Ttue
时其结果才是真。例如:
if (1+1 == 2) and ("The boy" != "Your girl friend"):
print("你精神很正常,同时不是 Gay :P")
print("-------------------------\n")
or
是“或”的意思,前两边只要有 True
,它的结果就是真
# or 关键字
n = 5
if n<7 or n>7:
print("n 不等于 7")
not
也是布尔表达式中的一员,表示“非”,会使其后布尔表达式表示相反的意思。
# not 关键字
if not 3>5:
print("3 小于等于 5")
del
关键字
del
是一个新的知识点,我们之前并没有接触过。
它的作用是就如同它的名字 删除, del
用于删除列表中指定索引的值,或删除变量。
它与 pop
有所不同,del
不会返回值,不过可以做切片(列表中的一个索引范围)删除。
# del 关键字
l = ['a', 'b', 'c', 'd', 'e']
print(l)
# 删除指定索引的值
del l[2]
print("删除索引 2:\n", l)
# 切片删除
del l[1:3]
print("删除切片 1-3:\n", l)
# pop 会返回被抛出的值
l_pop = l.pop(-1)
print("pop -1:\n", l_pop)
# 删除变量
del l
print(l)
最后这里因为我们删除掉了 l
所以报错了,不存在变量 l
from
import
关键字
import
关键字用于引入库或脚本,使其他库中的功能可以在当前脚本使用。只使用 import
引入的功能在使用时需要注明被引用的库或脚本的名字。
from
关键字用于辅助 import
关键字来精确引入库或脚本的具体功能,而不是整个库。
# from 和 import 关键字
# import 引入并通过 argv 功能打印脚本的名字
import sys
# 使用时需要库的名字
print(sys.argv)
# from 配合引入,并通过 argv 打印脚本名字
from sys import argv
print(argv)
while
关键字
while
用于指示开始一段 while 循环,如果它后面的条件是True
就会运行它下面缩进中的代码片段,并且在这些代码片段运行结束的时候,重新返回 while
所在的行,再次判断后面的条件。如此循环,直到条件为False
、跳出(见 break
关键字)或脚本运行终止。
# while 关键字
i = 0
print("开始 i + 1")
while i < 1000:
i += 1
print("while 循环结束,i =", i)
as
关键字
我的理解 as
关键字的主要作用其实是重命名,如把 impurt 引入的库重新命名;或者把 with
打开的文件命名
# as 关键字
# import 重命名
import sys as my_sys
from sys import argv as ar
print(my_sys.argv)
print(ar)
if
elif
else
关键字
这三个关键字都属于 if 语句,用来判断条件是否成立,并根据判断结果执行相应的代码片段。
if
标记 if 语句的起始,可以理解为“如果”的意思,后面紧跟需要判断的条件,如果条件为 True
则执行其下缩进中的代码。
else
当 if
的条件为 False
时执行 else 缩进下的代码。可以理解为“否则”的意思。
elif
是 if 和 else 的结合,表示 “否则就” 的意思,位置也在 if 和 else 之间。当 if 语句为假时,会判断 elif 是否成立。
如果它三个一起使用的话,整体的流程是:
另外,if 语句也可以嵌套使用
# if、elif、else 关键字
def age_of_marriage(age):
if age < 22:
print("年龄还小,不用着急找女朋友")
elif age == 22:
print("现在可以合法结婚啦")
else:
if age < 28:
print("差不多找个女盆友结婚吧")
else:
print("快快快!不然你和馆主一样啦!!!")
your_age = int(input('您今年贵庚?\n> '))
age_of_marriage(your_age)
global
关键字
global
用来定义全局变量。通常函数中的变量是局部变量,函数外的变量是全局变量。我们可以使用 global 把一个变量定义为全局变量。
# global 关键字
x = 6
def my_print():
print("函数中使用全局变量 x,其值是:", x)
def my_print2():
x = "局部变量"
print("函数中更改 x 的值:", x)
def my_global():
print("使用 global 在函数这个局部中改变全局变量 x")
global x
x = "全局变量"
print("全局中 x 的值是:", x)
my_print()
my_print2()
print("即便函数中更改了 x 的值,但现在全局中 x 的值还是:", x)
print("*********")
my_global()
print("现在,全局中 x 的值是:", x)
my_print()
my_print2()
with
关键字
with
关键字用于组成 with 语句,它的作用和上下文管理器有关,用于自动关闭打开的文件或线程。例如我们在15.读取文件和16.读写文件 中关于文件操作的练习中知道 open 的文件需要 close ,如果忘记关闭一方面会占用内存,另一方面则可能丢失数据。with
会自动关闭文件以解决忘记的烦恼。
有大神总结了更清晰详细介绍 浅谈 Python 的 with 语句
# with 关键字
# 通过 as 关键字把打开的文件命名为 f
with open("test.txt") as f:
print(f.read())
assert
关键字
assert
(断言)会声明它的布尔表达式的值必定为真,否会报错。我们可以自定义错误信息,所有 assert
也常常用来测试程序。
# assert 关键字
assert 1+1==2,"1+1 不等于 2"
assert 1+1!=2,"1+1 等于 2"
pass
关键字
pass
关键字相当于占位符的意思,它确保了程序结构的完整性。在程序不完善的情况下运行至 pass 处,会忽略代码的缺失而不会报错。
# pass 关键字
if 1+1 > 5:
print("宇宙要毁灭了")
else:
# 宇宙不会毁灭,但是我们暂时还不知道会发生什么
pass
没错,这里执行了 else
语句,但是因为 pass
了,所有结果是空的
yield
关键字
yield
关键字将函数返回为一个生成器。生成器是一个可迭代对象。凡是可以使用 for xx in xxx
逐个获取其中元素的对象都是可迭代对象,例如列表、字符串。但是和列表、字符串等不同,一个生成器实例只能迭代一次,并且在内存中只占用一个位置而不像列表有多少元素就就占用多少内存,因此生成器节省内存。
更多内容阅读推荐 Python yield 使用浅析 和 3. (译)Python关键字yield的解释(stackoverflow)
# yield 关键字
# 构造一个生成器用格式化字符生成字母
def my_yield():
for i in range(10):
yield "%c" % (97 + i) # ascii 码 97 是字母 a
# 实例化生成器
y = my_yield()
# 生成器无法打印其中内容,因为
# 未迭代时,其中不包含元素,而生成新的元素时旧元素抛弃
# 所有占用内存低
print(y)
# 迭代打印 生成器
for i in y:
print(i)
# 再次迭代无法再次获取,只能迭代一次
print("再次迭代:")
for i in y:
print(i)
print("迭代结束")
break
和 continue
关键字
这两个关键字都是用来打断循环的,不同点在于 break
是跳出整个循环。而 continue
是跳出本次循环。
# break 关键字
print("break :")
for i in range(10):
if i == 5:
break
print(i)
# continue 关键字
print("contiune :")
n = 11
while n > 0:
n -= 1
if n == 10:
print("开始倒数!")
continue
print(n)
try
except
finally
关键字
这三个关键字通常在异常处理的时候会用到。它们的作用是当程序出现错误的时候获取并处理异常从而避免程序因为异常而中断运行。
try
- except
代码块是异常处理时最常用的。我们把可能出现错误的代码放在 try
缩进中运行可以在异常发生时捕获异常信息。
而在 except
则负责如何处理异常,比如可以选择 pass
忽略,或者 print
打印一些信息。不过需要注意的是,except
可以在其后指定错误的类型,以便在该类型的错误被捕获时作出反应。
finally
语句在无论是否有错误都会被执行
# try except finally 关键字
try:
print(name)
except NameError:
print("变量名 name 不存在,将引发 NameError 错误")
# 可以使用 try-except-else 代码块在无错误的时候引发 else 语句。
try:
print("没有问题吧?")
except NameError:
print(NameError)
else:
print("运行正常")
# 有时候我们不知道会是什么误类型的情况下,可以不指定 except 的错误类型。
try:
print(int(name))
except:
print("出错啦,捕获到某种错误")
# 也可以用 as 把错误信息打印出来
try:
print(1/0)
except Exception as e: # Exception 是错误的基类
print("错误信息:", e)
# 可以写多行 except 获取不同的错误(前面的 except 触发后,后面的将不会再触发)
# 或者某几种错误放在一个括号中使用一个应该策略
try:
foo()
except (NameError, TypeError) as e:
print("发生意料之中的错误:", e)
except Exception as e:
print("发生意料之外的错误:", e)
print
内置函数
这个太熟悉了吧,不然从头重学——打印信息到屏幕上
class
关键字
class
背后包含的信息量太大了吧!!!它的作用是创建“类”。什么是类?我觉的《笨办法学 python》后面会说吧,简单说类是有相同方法、功能的对象的集合。
比如说汽车是类,它有可以驾驶的功能;suv、crv、mpv 则都属于汽车这个类,它都用于可以驾驶的功能。
python 中的类是类似的概念,它是一些共同属性、方法的综合体。
exec
和 eval
内置函数
exec
是在 python3 中改为内置函数的,它的作用似乎和另一个内置函数 eval
一样(?):是把字符串当作 python 的代码来执行
# exec 和 eval 内置函数
a = "print(1+1)"
exec(a)
eval(a)
in
关键字
in
和 and
or
not
一样都是布尔表达式的一员,用于表示左边的内容富否包含于右边。
raise
关键字
用于手动抛出异常,后跟异常类别和提示信息:
# raise 关键字
raise NameError("哈哈,名字错啦")
is
关键字
用于判断两个元素是否是引用的是内存中的同一个对象,相当于 id(a) == id(b)
id()
会返回对象在内存中的身份编号。
# is 关键字
a = 2
b = a
a is b
return
关键字
作用是从函数中返回一个值以便它用。
# return 关键字
def my_add(number):
for i in range(10):
number = number + i
return(number)
print("运行函数 my_add(3)")
my_add(3)
print("打印函数 my_add(5)")
print(my_add(5))
def
关键字
用于定义函数
for
关键字
咱也不说它了好么….
lambda
关键字
其实可能听到的更多的加 lambda 表达式。它是个挺厉害的东西。简单理解就是简写的函数。
它的冒号左边是要传入的参数,冒号右边是函数式
例如
# lambda 关键字
x = 10
f = lambda x:x*3
x = f(x)
print(x)
# 相当于
x = 10
def x3(x):
x *= 3
return x
x = x3(10)
print(x)
print("lambda 表达式可以简洁的生成一个函数")