跟着官档学python 003

您所在的位置:网站首页 python控制流语句 跟着官档学python 003

跟着官档学python 003

2023-03-14 22:16| 来源: 网络整理| 查看: 265

本文共 11327 字,大约阅读时间需要 37 分钟。

流程控制语句

除了 while 语句,Python还拥有在其他语言里常见的控制语句,以及一些好玩的语句。

4.1 if 语句 >>> x=int(input("Please enter an integer: "))Please enter an integer: 55>>> if x==0:... print('Zero')... elif x%2==0:... print('double')... elif x%2==1:... print('single')...single>>>

可以有0个或多个 elif 块,,并且 else 块是可选的。关键字 ‘elif‘ 比 ‘else if’ 短,,并且可以避免过度缩进。一个if … elif … elif …序列 是对其他语言的switch or case 语句的替代方案。

4.2 for 语句

Python 的 for 语句可以按照元素出现的顺序迭代任何序列(列表或字符串)。例如:

>>> words = ['dog','cat','windows']>>> for w in words:... print(w,len(w))...dog 3cat 3windows 7

如果要在循环内修改正在迭代的序列(例如,复制所选的项目),建议首先创建原序列的拷贝。迭代序列不会隐式地创建副本。 使用切片就可以很容易地做到:

>>> for w in words[:]:... if len(w) > 6:... words.insert(0,w)...>>> words['windows', 'dog', 'cat', 'windows'] 4.3 range() 函数

如果你确实需要遍历一个数字序列,内置函数 range() 会派上用场。它生成算术级数:

>>> for i in range(5):... print(i)...01234

给定的终点不会包含在生成的序列中; range(10)会生成10个值,即长度为10的序列的项的合法索引。也可以让 range 函数从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为‘步长’):

>>> for i in range(5,10):... print(i)...56789>>> for i in range(0,10,3):... print(i)...0369>>> for i in range(-10,-100,-25):... print(i)...-10-35-60-85

要迭代序列的索引,您可以将range()和len()组合如下:

>>> a=['Mary','had','a','little','lamb','green']>>> for i in range(len(a)):... print(i,a[i])...0 Mary1 had2 a3 little4 lamb5 green

然而,在大多数这类情况,一般使用 enumerate() 函数 如果你只打印 range,会出现奇怪的结果:

>>> print(range(5,10))range(5, 10)>>>

在很多方面由 range() 返回的对象的行为就像它是一个列表,但事实上它不是。它是一个对象。当您遍历它时, 它会返回所需的序列连续项。但它并不真的生成了列表,从而节省了空间。

我们说这样一个对象是iterable,就是说,它适合作为一个函数和结构的目标,而函数期望从中获得连续的项目,直到耗尽。我们已经看到 for 语句是这种 迭代器。list() 函数是另一个;它从可迭代量创建列表︰

>>> list(range(5,10,2))[5, 7, 9]>>> 4.4 break和continue语句,以及循环中else子句

break语句和 C 中的类似,用于跳出最近的 for 或 while 循环。

循环语句可以有一个 else 子句;当(for)循环迭代完整个列表或(while)循环条件变为假,而非由break语句终止时,就会执行这个else语句。下面循环搜索质数的代码例示了这一点:

>>> for n in range(2,10):... for x in range(2,n):... if n%2==0:... print(n,'equals',x,'*',n//x)... break... else:... print(n,' is a prime number')...2  is a prime number3  is a prime number4 equals 2 * 25  is a prime number6 equals 2 * 37  is a prime number8 equals 2 * 49  is a prime number(是的,这是正确的代码。仔细看︰ else 子句属于 for 循环,不 是 if 语句的 。)

continue语句,也是从C语言借来的,表示继续下一次迭代:

>>> for num in range(2,10):... if num%2==0:... print('fund an even number:',num)... continue... print('fund a number',num)...fund an even number: 2fund a number 3fund an even number: 4fund a number 5fund an even number: 6fund a number 7fund an even number: 8fund a number 9 4.5 pass 语句

pass 语句什么也不做。当语法上需要语句但程序不需要动作时,可以使用它。例如:

>>> while True:... pass  # Busy-wait for keyboard interrupt (Ctrl+C)...

这通常用于创建最小的类:

>>> class MyEmptyClass:... pass...

另一个使用pass的地方是编写新代码时作为函数体或控制体的占位符,这让你在更抽象层次上思考。pass语句将被默默地忽略:

>>> def initlog(*args):... pass... 4.6 定义函数

我们可以创建一个函数,将斐波纳契(Fibonacci)序列写入任意边界:

>>> def fib(n):... a,b=0,1... while a     >>>                 

关键字引入函数的定义。其后必须跟有函数名和以括号标明的形式参数列表。组成函数体的语句从下一行开始,且必须缩进。

函数定义会在当前符号表内引入函数名。函数名对应的值的类型是解释器可识别的用户自定义函数。此值可以分配给另一个名称,然后该名称也可作为函数。这是通用的重命名机制:

>>> >>> >>>               

如果你使用过其他语言,你可能会反对说:不是一个函数,而是一个过程子程序,因为它并不返回任何值。事实上,没有语句的函数也返回一个值,尽管是一个很无聊的值。此值被称为(它是一个内置的名称)。如果只是唯一的输出,解释器通常不会打印出来。如果你真的想看到这个值,可以使用语句:

>>> >>> 

写一个函数返回菲波那契数列的列表,而不是打印出来,非常简单:

>>>          >>>            

此示例中,像往常一样,演示了一些新的功能:

语句可以从函数中携带着返回值返回。语句不携带任何表达式参数时返回。如果一直执行到整个函数结束还没有碰到语句,也返回。

语句调用了列表的一个方法。方法是“属于”一个对象且名字叫做的函数,其中是某个对象(可能是个表达式),是由该对象类型定义的方法的名称。不同类型定义了不同的方法。不同的类型的方法可以具有相同的名称而不引起歧义。(可以使用定义你自己的对象类型和方法,参见)示例中显示的方法是给列表对象定义的;它添加一个新的元素到列表的末尾。在这个示例中,它等同于,但是它更高效。

更多关于定义函数

可以定义具有可变数目的参数的函数。有三种函数形式,可以结合使用。

默认参数值

最有用的形式是指定一个或多个参数的默认值。这种方法创建的函数被调用时,可以带有比定义的要少的参数。例如:

>>>                       >>           >>>                                          >>>                     

这个函数可以通过几种方式调用:

)只提供必须的参数‘’)提供可选参数中的一个‘’)或者提供所有参数‘’‘’

默认值在函数定义的时刻,在定义的作用域中计算,因此:

>>> >>>   >>> >>> 这里默认值是常量

重要的警告︰默认值只初始化一次。当默认值是一个可变对象(如列表,字典或大多数类的实例)时,默认值会不同。例如,下面的函数在后续调用过程中会累积传给它的参数:

>>>     >>> >>>  >>>   

如果你不想默认值在随后的调用中共享,可以像这样编写函数:

>>>          >>> >>> >>> 关键字参数

函数还可以用形式的关键字参数调用。例如,下面的函数:

>>>                  >>>

接受一个必需的参数()和三个可选参数()。可以用下列任意一种方式调用这个函数:

>>>                   >>>                   >>>                   >>>                   >>>                        >>>                          

但下面的所有调用将无效:

                           

在函数调用中,关键字参数必须写在位置参数之后。传递的所有关键字参数必须匹配函数接收的参数中的一个(例如,不是函数的合法参数),它们的顺序并不重要。这同样适用于非可选的参数(例如,也是合法的)。任何参数都不可以多次赋值。下面的示例由于这种限制将失败:

>>>   >>>                     

如果在最后存在一个形式的形式参数,它将接收一个字典,这个字典包含除形式参数之外的所有关键字参数。它可以与形式的形式参数组合,这种形式接收一个元组,这个元组包含除形式参数之外的所有位置参数。必须出现在之前)。例如,如果我们定义这样的函数:

程序>>>                                     可以这样调用>>>              打印结果                               >>>

注意,在打印关键字参数内容之前,它的名称列表是通过排序字典的方法得到的关键字创建的;如果不这样做,打印出来的参数顺序将是未定义的。

任意参数的列表

最后,最不常用的场景是指明某个函数可以被可变个数的参数调用。这些参数将被封装在一个元组中(参见元组和序列)。在可变数量的参数之前,可能出现零个或多个正常参数。

   

通常,这些可变的参数将位于形式参数列表的最后面,因为它们将剩下的传递给函数的所有输入参数都包含进去。出现在之后的任何形式参数都是“非关键字不可”的参数,意味着它们只能用作关键字参数而不能是位置参数。

>>>    >>> >>> 解包参数列表

当传递的参数已经是一个列表或元组时,情况与之前相反,你要分拆这些参数,因为函数调用要求独立的位置参数。例如,内建的函数期待单独的和参数。如果它们不能单独地获得,可以编写带有操作的函数调用,来从一个列表或元组分拆出参数:

>>>   >>> >>>   

同样的风格,字典可以通过操作传递关键字参数:

>>>                        >>>      >>>                 表达式

可以使用关键字创建小的匿名函数。此函数会返回两个参数的总和:。函数可以用于任何需要函数对象的地方。在语法上,它们被局限于只能有一个单独的表达式。在语义上,他们只是普通函数定义的语法糖。像嵌套的函数定义,函数可以从包含它的作用域中引用变量:

>>>     >>>   >>> >>> >>> 

上面的示例使用表达式返回一个函数。另一种用法是将一个小函数作为参数传递:

不是很懂,先贴上来,后续补充>>>   >>>  >>>        文档字符串

惯例:)第一行永远应该是对象用途的简短、精确的总述。这一行应该以大写字母开头,并以句号结尾。)如果在文档字符串中有更多的行,第二行应该是空白,在视觉上把摘要与剩余的描述分离开来。这里是一个多行文档字符串的示例:

>>>               >>>          函数注解

注解以字典形式存储在函数的属性中,对函数其它任何部分没有任何影响。参数注解的定义是参数名后面跟着一个冒号,然后紧跟着一个用于计算注解的表达式。返回值注解的定义是一个>然后紧跟着一个表达式,它们位于参数列表和表示语句结束的冒号之间。下面的示例包含一个位置参数,一个关键字参数,和被注解的返回值。

>>>        >              >>>                 插曲:代码风格

对,已经成为多数项目遵循的代码风格指南;它推动了一种非常易于阅读且赏心悦目的编码风格。下面说几点:

)使用个空格的缩进,不要使用制表符。

)个空格是小缩进(允许更深的嵌套)和大缩进(易于阅读)之间很好的折衷。制表符会引起混乱,最好弃用。

)折行以确保其不会超过个字符。

这有助于小显示器用户阅读,也可以让大显示器能并排显示几个代码文件。

)使用空行分隔函数和类,以及函数内的大块代码。

)如果可能,注释单独成行。

)使用文档字符串。

)在操作符两边和逗号之后加空格,但不要直接在左括号后和右括号前加:

)类和函数的命名风格要一致;传统上使用(驼峰风格)命名类而用(小写字母加下划线)命名函数和方法。方法的第一个参数名称应为。

)如果您的代码要在国际环境中使用,不要使用花哨的编码。默认的或者在任何时候都是最好的选择。

)同样,只要存在哪怕一丁点可能性有使用另一种不同语言的人会来阅读或维护你的代码,就不要在标识符中使用非字符。

转载地址:如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3