很久没更新这篇教程了,都快忘记了,最近会把他更新完的,想学习前面的教程可以点这边:python教程——目录!这是我创建的一个目录
翻译原文: http://zetcode测试数据/lang/python/keywords/
在 Python 编程教程的这一部分中,我们介绍了 Python 语言中的关键字。
Python 关键字
Python 关键字是构成 Python 语言词汇的特殊单词。 它是保留字,不能用作标识符。
Python 关键字列表
以下是 Python 编程语言的关键字列表。
False???????????????def?????????????????if??????????????????raiseNone????????????????del?????????????????import??????????????returnTrue????????????????elif????????????????in??????????????????tryand?????????????????else????????????????is??????????????????whileas??????????????????except??????????????lambda??????????????withassert??????????????finally?????????????nonlocal????????????yieldbreak???????????????for?????????????????notclass???????????????from????????????????orcontinue????????????global??????????????pass
Python 是一种动态语言。 它随时间变化。 关键字列表将来可能会更改。
keywords.py
#!/usr/bin/env?python#?keywords.pyimport?sysimport?keywordprint("Python?version:?",?sys.version_info)print("Python?keywords:?",?keyword.kwlist)
该脚本打印 Python 的版本及其实际的关键字列表。
$?./keywords.py Python?version:??sys.version_info(major=3,?minor=5,?micro=2,?releaselevel='final',?serial=0)Python?keywords:??['False',?'None',?'True',?'and',?'as',?'assert',?'break',?'class','continue',?'def',?'del',?'elif',?'else',?'except',?'finally',?'for',?'from',?'global','if',?'import',?'in',?'is',?'lambda',?'nonlocal',?'not',?'or',?'pass',?'raise',?'return','try',?'while',?'with',?'yield']
输出显示了 Python 3.5.2 的 Python 关键字列表。
Python 控制流程
while关键字是用于控制程序流程的基本关键字。 执行while循环内的语句,直到表达式的值为False为止。
while_kwd.py
#!/usr/bin/env?python#?while_kwd.pynumbers?=?[22,?34,?12,?32,?4]mysum?=?0i?=?len(numbers)while?i?!=?0: ???i?-=?1 ???mysum?=?mysum?+?numbers[i]print("The?sum?is:",?mysum)
在我们的脚本中,我们要计算数字列表中所有值的总和。 我们利用while循环。 我们确定列表的长度。 反复执行while循环,直到i等于零为止。 在循环的主体中,我们递减计数器并计算值的总和。
$?./while_kwd.py The?sum?is:?104
值的总和为 104。
如果需要,可使用break关键字来中断循环。
break_kwd.py#!/usr/bin/env?python#?break_kwd.pyimport?randomwhile?True:val?=?random.randint(1,?30)print(val,?end="?")if?val?==?22:breakprint()
在我们的示例中,我们打印随机整数。 如果数字等于 22,则用break关键字中断循环。
$?./break_kwd.py14?14?30?16?16?20?23?15?17?22
下一个示例显示continue关键字。 它用于中断当前周期,而不会跳出整个周期。 它启动一个新的循环。
continue_kwd.py#!/usr/bin/env?python#?continue_kwd.pynum?=?0while?num?<?1000:??num?=?num?+?1??if?num?%?2?==?0:?continue??print(num,?end="?")
在示例中,我们打印了所有小于 1000 的数字,这些数字不能除以 2 而没有余数。
if关键字是常见的控制流关键字。 它用于确定要执行的语句。
if_kwd.py#!/usr/bin/env?python#?if_kwd.pyage?=?17if?age?>?18:print("Driving?licence?issued")else:print("Driving?licence?not?permitted")
if关键字测试此人是否大于 18 岁。如果符合条件,则颁发驾驶执照。 else关键字是可选的。 除非条件为True,否则执行else关键字之后的语句。
接下来,我们了解如何使用elif关键字合并语句。
elif_kwd.py#!/usr/bin/env?python#?elif_kwd.pyname?=?"Luke"if?name?==?"Jack":print("Hello?Jack!")elif?name?==?"John":print("Hello?John!")elif?name?==?"Luke":print("Hello?Luke!")else:print("Hello?there!")
如果第一个测试的求值结果为False,那么我们继续下一个测试。 如果没有一个测试是True,则执行else语句。
$?./elif_kwd.py Hello?Luke!
这是输出。
for关键字用于遍历集合中的项目,以便它们出现在容器中。
for_kwd.py#!/usr/bin/env?python#?for_kwd.pylyrics?=?"""Are?you?really?here?or?am?I?dreaming I?can't?tell?dreams?from?truth for?it's?been?so?long?since?I?have?seen?you I?can?hardly?remember?your?face?anymore """for?i?in?lyrics:print(i,?end="?")
在该示例中,我们有一个lyrics变量,该变量具有歌曲的节奏。 我们遍历文本并逐个字符打印文本。 print语句中的逗号阻止将每个字符打印在新行上。
$?./for_kwd.py A?r?e???y?o?u???r?e?a?l?l?y???h?e?r?e???o?r???a?m???I???d?r?e?a?m?i?n?g I???c?a?n?'?t???t?e?l?l???d?r?e?a?m?s???f?r?o?m???t?r?u?t?h f?o?r???i?t?'?s???b?e?e?n???s?o???l?o?n?g???s?i?n?c?e???I???h?a?v?e???s?e?e?n???y?o?u I???c?a?n???h?a?r?d?l?y???r?e?m?e?m?b?e?r???y?o?u?r???f?a?c?e???a?n?y?m?o?r?e
这是脚本的输出。
Python 布尔表达式
首先,我们介绍适用于布尔值和表达式的关键字:is,or,and和not。
objects.py#!/usr/bin/env?python#?objects.pyprint(None?==?None)print(None?is?None)print(True?is?True)print([]?==?[])print([]?is?[])print("Python"?is?"Python")
==运算符测试是否相等。 is关键字测试对象身份。 我们是否在谈论同一对象。 请注意,多个变量可能引用同一对象。
$?./objects.pyTrueTrueTrueTrueFalseTrue
输出可能会让您感到惊讶。 在 Python 语言中,只有一个None和一个True对象。 这就是为什么True相等并且也与True相同的原因。 无论如何,那里只有一个真理。 空列表[]等于另一个空列表[]; 但它们并不相同。 Python 已将它们放入两个不同的内存位置。 它们是两个不同的对象。 因此,is关键字返回False。 另一方面,“Python” is "Python"返回True。 这是由于优化。 如果两个字符串字面值相等,则将它们放在相同的内存位置。 字符串是不可变的实体,因此不会造成任何伤害。
not关键字取反布尔值。
not_kwd.py#!/usr/bin/env?python#?not_kwd.pygrades?=?["A",?"B",?"C",?"D",?"E",?"F"]grade?=?"L"if?grade?not?in?grades:print("unknown?grade")
在我们的示例中,我们测试了等级值是否来自可能等级的列表。
$?./not_kwd.py unknown?grade
如果必须满足布尔表达式中的所有条件,则使用关键字and。
and_kwd.py#!/usr/bin/env?python#?and_kwd.pysex?=?"M"age?=?26if?age?<?55?and?sex?==?"M":print("a?young?male")
在我们的示例中,我们测试是否满足两个条件。 如果变量age小于55且变量sex等于"M",则将"a young male"字符串打印到控制台。
$?./and_kwd.py a?young?male
如果必须满足至少一个条件,则使用关键字or。
or_kwd.py#!/usr/bin/env?python#?or_kwd.pyname?=?"Jack"if?(name?==?"Robert"?or?name?==?"Frank"?or?name?==?"Jack"??or?name?==?"George"?or?name?==?"Luke"):print("This?is?a?male")
如果至少一个表达式为true,则执行print语句。
当我们使用 Python 编程语言中的和/或关键字工作时,就会进行短路求值。 短路求值意味着仅当第一个参数不足以确定表达式的值时,才求值第二个参数:当和的第一个参数求值为false时,总值必须为false; 当或的第一个参数为true时,总值必须为true。
一个典型的例子如下。
short_circuit.py#!/usr/bin/env?python#?short_circuit.pyx?=?10y?=?0if?(y?!=?0?and?x/y?<?100):print("a?small?value")
表达式的第一部分计算为false。 表达式的第二部分不计算。 否则,我们将得到ZeroDivisionError。
Python 模块
以下关键字与模块一起使用。 模块是用于组织 Python 代码的文件。
import关键字用于将其他模块导入 Python 脚本。
import_kwd.py#!/usr/bin/env?python#?import_kwd.pyimport?mathprint(math.pi)
我们使用import关键字将math模块导入脚本的名称空间。 我们打印PI值。
如果我们想给模块一个不同的别名,我们使用as关键字。
as_kwd.py#!/usr/bin/env?python#?as_kwd.pyimport?random?as?rndfor?i?in?range(10):print?(rnd.randint(1,?10),?end="?")print()
在这种情况下,我们将导入随机模块。 我们打印十个随机整数。 我们给随机模块一个不同的别名,即rnd。 在脚本中,我们使用新别名引用模块。
$?./as_kwd.py1?2?5?10?10?8?2?9?7?2from关键字用于从模块中导入特定的变量,类或函数。 from_kwd.py#!/usr/bin/env?python#?from_kwd.pyfrom?sys?import?versionprint(version)
从sys模块中,导入version变量。 如果要打印,则不需要使用模块名称。 版本变量被直接导入到我们的命名空间中,我们可以直接引用它。
$?./from_kwd.py3.7.0?(v3.7.0:1bf9cc5093,?Jun?27?2018,?04:59:51)?[MSC?v.1914?64?bit?(AMD64)]
Python 函数
在这里,我们描述与函数关联的关键字。 def关键字用于创建新的用户定义函数。 函数是我们在其中组织代码的对象。
def_kwd.py#!/usr/bin/env?python#?def_kwd.pydef?root(x):return?x?*?x a?=?root(2)b?=?root(15)print(a,?b)
该示例演示了一个新的简单函数。 该函数计算数字的平方。 return键与函数定义紧密联系; 它退出函数并返回一个值。 然后将该值分配给a和b变量。
lambda关键字创建一个新的匿名函数。 匿名函数未绑定到特定名称。
lambda_kwd.py#!/usr/bin/env?python#?lambda_kwd.pya?=?lambda?x:?x?*?xfor?i?in?(1,?2,?3,?4,?5):print(a(i),?end="?")print()
如您在前面的示例中看到的,我们没有使用def关键字创建新函数。 取而代之的是,我们动态使用内联函数。
$?./lambda_kwd.py1?4?9?16?25
如果要访问在函数外部定义的变量,请使用global关键字。
global_kwd.py#!/usr/bin/env?python#?global_kwd.pyx?=?15def?function():global?x ????x?=?45function()print(x)
通常,在函数内部分配x变量时,我们会创建一个新的局部变量,该局部变量仅在该函数中有效。 但是,如果使用global关键字,则会在函数定义中更改变量ouside。
$?./global_kwd.py45
Python 异常
接下来,我们将使用与异常处理一起使用的关键字。
$?cat?films Fargo Aguirre,?der?Zorn?Gottes Capote Grizzly?man Notes?on?a?scandal
这是一个文件,其中包含一些电影标题。 在代码示例中,我们将阅读它。
try_except_finally.py#!/usr/bin/env?python#?try_except_finally.pyf?=?Nonetry:f?=?open('films',?'r')for?i?in?f:print(i,?end="")except?IOError:print("Error?reading?file")finally:if?f:f.close()
我们尝试读取电影文件。 如果没有异常,我们将文件的内容打印到控制台。 可能会有异常。 例如,如果我们提供了错误的文件名。 在这种情况下,会引发IOError异常。 except关键字捕获异常并执行其代码块。 最后始终执行finally关键字。 我们用它来清理我们的资源。
在下一个示例中,我们显示如何使用raise关键字创建用户定义的异常。
raise_kwd.py#!/usr/bin/env?python#?raise_kwd.pyclass?YesNoException(Exception): ???def?__init__(self):???print('This?is?not?a?yes?or?no?answer')answer?=?'y'if?(answer?!=?'yes'?and?answer?!=?'no'):raise?YesNoExceptionelse:print('Correct?value')
在该示例中,我们仅期望是/否值。 对于其他可能性,我们提出一个异常。
$?./raise_kwd.py This?is?not?a?yes?or?no?answer Traceback?(most?recent?call?last): ??File?"./raise_kwd.py",?line?15,?in?<module>raise?YesNoException __main__.YesNoException
其他关键词
del关键字删除对象。
del_kwd.py#!/usr/bin/env?python#?del_kwd.pya?=?[1,?2,?3,?4]print(a)del?a[:2]print(a)
在我们的示例中,我们有四个整数的列表。 我们从列表中删除第一个数字。 结果将打印到控制台。
$?./del_kwd.py[1,?2,?3,?4][3,?4]
这是示例的输出。
pass关键字不执行任何操作。 在某些情况下,这是一个非常方便的关键字。
def?function():pass
我们有一个函数。 此函数尚未实现。 (将在以后。)函数的主体不能为空。 因此,我们可以在此处使用pass关键字,而不是打印“函数尚未实现”之类的内容。
assert关键字用于调试目的。 我们可以将其用于对我们显而易见的测试条件。 例如,我们有一个计算工资的程序。 我们知道薪水不能少于零。 因此,我们可以在代码中添加这样的断言。 如果断言失败,则解释器抱怨。
assert_kwd.py#!/usr/bin/env?python#?assert_kwd.pysalary?=?3500salary?-=?3560?#?a?mistake?was?doneassert?salary?>?0
在程序执行期间,犯了一个错误。 薪水变成负数。
$?./assert_kwd.py Traceback?(most?recent?call?last): ??File?"./assert_kwd.py",?line?8,?in?<module>assert?salary?>?0AssertionError
AssertionError无法执行脚本。
class关键字用于创建新的用户定义对象。
class_kwd.py#!/usr/bin/env?python#?class_kwd.pyclass?Square:def?__init__(self,?x):self.a?=?xdef?area(self):print(self.a?*?self.a)sq?=?Square(12)sq.area()
在代码示例中,我们创建一个新的Square类。 然后,我们实例化该类并创建一个对象。 我们计算方形物体的面积。
exec关键字动态执行 Python 代码。
exec_kwd.py#!/usr/bin/env?python#?exec_kwd.pyexec("for?i?in?[1,?2,?3,?4,?5]:?print(i,?end='?')")
我们使用for循环从列表中打印五个数字; 全部都在exec关键字内。
$?./exec_kwd.py1?2?3?4?5
这是示例输出。
接下来,我们提到in关键字。 关键字测试序列中是否存在值。
in_kwd.py#!/usr/bin/env?python#?in_kwd.pyprint(4?in?(2,?3,?5,?6))for?i?in?range(25):print(i,?end="?")print()
在此示例中,in关键字测试数字 4 是否在元组中。 第二种用法是在for循环中遍历元组。 内置函数range()返回整数0…24。
$?./in_kwd.pyFalse0?1?2?3?4?5?6?7?8?9?10?11?12?13?14?15?16?17?18?19?20?21?22?23?24
yield关键字与生成器一起使用。
yield_kwd.py#!/usr/bin/env?python#?yield_kwd.pydef?gen():x?=?11yield?x it?=?gen()print(it.__next__())
yield关键字退出生成器并返回一个值。
$?./yield_kwd.py11
在 Python 教程的这一部分中,我们介绍了 Python 关键字。
有需要更多资料的可以加群【785128166】免费领取资料(面试题,视频教程,PDF文档)
查看更多关于Python教程 —— 9.Python关键字的详细内容...