Python 开发编码规范

Python 开发编码规范
Python 开发编码规范

Python开发编码规范

这篇文档所给出的编码约定适用于在主要的Python发布版本中组成标准库的Python 代码,请查阅相关的关于在Python的C实现中C代码风格指南的描述。

这篇文档改编自Guido最初的《Python风格指南》一文,并从《Barry's style guide》中添加了部分内容。在有冲突的地方,Guide的风格规则应该是符合本PEP的意图(译注:指当有冲突时,应以Guido风格为准)。这篇PEP仍然尚未完成(实际上,它可能永远都不会完成)。

在这篇风格指导中的一致性是重要的。在一个项目内的一致性更重要。在一个模块或函数内的一致性最重要。但最重要的是:知道何时会不一致——有时只是没有实施风格指导。当出现疑惑时,运用你的最佳判断,看看别的例子,然后决定怎样看起来更好。并且要不耻下问!

打破一条既定规则的两个好理由:

(1)当应用这个规则是将导致代码可读性下降,即便对某人来说,他已经习惯于按这条

规则来阅读代码了。

(2)为了和周围的代码保持一致而打破规则(也许是历史原因),虽然这也是个清除其它

混乱的好机会(真正的XP风格)。

代码的布局

缩进

使用Emacs的Python-mode的默认值:4个空格一个缩进层次。对于确实古老的代码,你不希望产生混乱,可以继续使用8空格的制表符(8-space tabs)。Emacs Python-mode自动发现文件中主要的缩进层次,依此设定缩进参数。

制表符还是空格

永远不要混用制表符和空格。最流行的Python缩进方式是仅使用空格,其次是仅使用制表符,混合着制表符和空格缩进的代码将被转换成仅使用空格。(在Emacs中,选中整个缓冲区,按ESC-x去除制表符。)调用Python命令行解释器时使用-t选项,可对代码中不合法得混合制表符和空格发出警告,使用-tt时警告将变成错误。这些选项是被高度推荐的。

对于新的项目,强烈推荐仅使用空格而不是制表符。许多编辑器拥有使之易于实现的功能(在Emacs中,确认indent-tabs-mode是nil)。

行的最大长度

周围仍然有许多设备被限制在每行80字符:而且,窗口限制在80个字符。使将多个窗口并排放置成为可能。在这些设备上使用默认的折叠方式看起来有点丑陋。因此,请将所有行限制在最大79字符(Emacs准确得将行限制为长80字符),对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符。

折叠长行的首选方法是使用Pyhon支持的圆括号,方括号和花括号内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好,确认恰当得缩进了延续的行。

Emacs的Python-mode正确得完成了这些。一些例子:

#!Python

class Rectangle(Blob):

def __init__(self,width,height,color='black',emphasis=None,highlight=0):

if width == 0 and height == 0 and \

color == 'red' and emphasis == 'strong' or \

highlight > 100:

raise ValueError,"sorry,you lose"

if width == 0 and height == 0 and (color == 'red' or

emphasis is None):

raise ValueError,"I don't think so"

Blob.__init__(self,width,height,color,emphasis,highlight)

空行

用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割,额外的空行可被用于(保守的)分割相关函数组成的群,在一组相关的单句中间可以省略空行。(例如:一组哑元素)。

当空行用于分割方法的定义时,在‘class’行和第一个方法定义之间也要有一个空行。在函数中使用空行时,请谨慎的用于表示一个逻辑段落。Python接受contol-L(即^L)换页符作为空格:Emacs(和一些打印工具),视这个字符为页面分割符,因此在你的文件中,可以用他们来为相关片段分页。

编码

Python核心发布中的代码必须始终使用ASCII或Latin-1编码(又名ISO-8859-1),使用ASCII的文件不必有编码cookie,Latin-1仅当注释或文档字符串涉及作者名字需要Latin-1时才被使用:

另外使用\x转义字符是在字符串中包含非ASCII(non-ASCII)数据的首选方法。

作为PEP 263实现代码的测试套件的部分文件是个例外。

导入

通常应该在单独的行中导入(Imports),例如:

No:import sys,os

Yes:import sys

import os

但是这样也是可以的:

from types import StringType,ListType

Imports 通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前。Imports应该有顺序地成组安放:

1、标准库的导入(Imports )

2、相关的主包(major package)的导入(即,所有的email包在随后导入)

3、特定应用的导入(imports)

你应该在每组导入之间放置一个空行,对于内部包的导入是不推荐使用相对导入的,对所有导入都要使用包的绝对路径。

从一个包含类的模块中导入类时,通常可以写成这样:

from MyClass import MyClass

from foo.bar.YourClass import YourClass

如果这样写导致了本地名字冲突,那么就这样写

import MyClass

import foo.bar.YourClass

即使用"MyClass.MyClass"和"foo.bar.YourClass.YourClass"

表达式和语句中的空格

Guido不喜欢在以下地方出现空格:

紧挨着圆括号,方括号和花括号的,如:"spam( ham[ 1 ],{ eggs:2 } )"。要始终将它写成"spam(ham[1],{eggs:2})"。

紧贴在逗号,分号或冒号前的,如:

"if x == 4:print x,y:x,y = y,x"。要始终将它写成

"if x == 4:print x,y:x,y = y,x"。

紧贴着函数调用的参数列表前开式括号(open parenthesis )的,如"spam (1)"。要始终将它写成"spam(1)"。

紧贴在索引或切片,开始的开式括号前的,如:

"dict ['key'] = list [index]"。要始终将它写成"dict['key'] = list[index]"。

在赋值(或其它)运算符周围的用于和其它并排的一个以上的空格,如:

#!Python

x= 1

y= 2

long_variable = 3

要始终将它写成

#!Python

x = 1

y = 2

long_variable = 3

(不要对以上任意一条和他争论——Guido 养成这样的风格超过20年了。)

其它建议

始终在这些二元运算符两边放置一个空格:赋值(=),比较(==,<,>,!=,<>,<=,>=,in,not in,is,is not),布尔运算(and,or,not)。

按你的看法在算术运算符周围插入空格。始终保持二元运算符两边空格的一致。

一些例子:

#!Python

i = i+1

submitted = submitted + 1

x = x*2 - 1

hypot2 = x*x + y*y

c = (a+b) * (a-b)

c = (a + b) * (a - b)

不要在用于指定关键字参数或默认参数值的'='号周围使用空格,例如:

#!Python

def complex(real,imag=0。0):

return magic(r=real,i=imag)

不要将多条语句写在同一行上:

No:if foo == 'blah':do_blah_thing()

Yes:if foo == 'blah':

do_blah_thing()

No:do_one():do_two():do_three()

Yes:do_one()

do_two()

do_three()

注释

同代码不一致的注释比没注释更差。当代码修改时,始终优先更新注释!注释应该是完整的句子,如果注释是一个短语或句子,首字母应该大写,除非他是一个以小写字母开头的标识符(永远不要修改标识符的大小写)。

如果注释很短,最好省略末尾的句号。注释块通常由一个或多个由完整句子构成的段落组成,每个句子应该以句号结尾。你应该在句末,句号后使用两个空格,以便使Emacs的断行和填充工作协调一致。

用英语书写时,断词和空格是可用的。非英语国家的Python程序员:请用英语书写你的注释,除非你120%的确信这些代码不会被不懂你的语言的人阅读。

注释块

注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中每行以‘#’和一个空格开始(除非他是注释内的缩进文本)。注释块内的段落以仅含单个‘#’的行分割。注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释)。

行内注释

一个行内注释是和语句在同一行的注释,行内注释应该谨慎适用,行内注释应该至少用两个空格和语句分开,它们应该以'#'和单个空格开始。

x = x+1 # Increment x

如果语意是很明了的,那么行内注释是不必要的,事实上是应该被移除的。不要这样写:x = x+1 # Increment x

x = x+1 # Compensate for border

但是有时,这样是有益的:

x = x+1 # Compensate for border

文档字符串

应该一直遵守编写好的文档字符串的约定PEP 257 [3]。为所有公共模块,函数,类和方法编写文档字符串。文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释。这个注释应该在"def"这行后。

PEP 257 描述了好的文档字符串的约定。一定注意,多行文档字符串结尾的"""应该单独成行,例如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first。

"""

对单行的文档字符串,结尾的"""在同一行也可以。

版本注记

如果你要将RCS或CVS的杂项(crud)包含在你的源文件中,按如下做。

#!Python

__version__ = "$Revision:1。4 $"

# $Source:E:/cvsroot/Python_doc/pep8。txt,v $

这个行应该包含在模块的文档字符串之后,所有代码之前,上下用一个空行分割。

命名约定

Python库的命名约定有点混乱,所以我们将永远不能使之变得完全一致,不过还是有公认的命名规范的。新的模块和包(包括第三方的框架)必须符合这些标准,但对已有的库存在不同风格的,保持内部的一致性是首选的。

描述:命名风格

有许多不同的命名风格。以下的有助于辨认正在使用的命名风格,独立于它们的作用。以下的命名风格是众所周知的:

b (单个小写字母)

B (单个大写字母)

Lowercase(小写)

lower_case_with_underscores(有下划线的小写)

UPPERCASE(大写)

UPPER_CASE_WITH_UNDERSCORES(有下划线的大写)

CapitalizedWords (或CapWords,CamelCase这样命名是因为可从字母的大小写分出单词。这有时也被当作StudlyCaps。

mixedCase (与CapitalizedWords的不同在于首字母小写!)

Capitalized_Words_With_Underscores(有下划线的首字母大写)(丑陋!)

还有用短的特别前缀将相关的名字聚合在一起的风格。这在Python中不常用,但是出于完整性要提一下,例如,os.stat()函数返回一个元组,他的元素传统上说名如st_mode,st_size,st_mtime等等。

X11库的所有公开函数以X开头。(在Python中,这个风格通常认为是不必要的,因为属性和方法名以对象作前缀,而函数名以模块名作前缀。)

另外,以下用下划线作前导或结尾的特殊形式是被公认的(这些通常可以和任何习惯组合):

_single_leading_underscore(单个下划线作前导):弱的“内部使用(internal use)”标志。(例如,“from M import *”不会导入以下划线开头的对象)。

single_trailing_underscore_(单个下划线结尾):用于避免与Python关键词的冲突,例如:“Tkinter.Toplevel(master,class_='ClassName')”。

_double_leading_underscore(双下划线):从Python 1.4起为类私有名。

_double_leading_and_trailing_underscore_:“magic”对象或属性,存在于用户控制的(user-controlled)名字空间,例如:_init_,_import_ 或_file_。有时它们被用户定义用于触发某个魔法行为(例如:运算符重载):有时被构造器插入,以便自己使用或为了调试。因此,在未来的版本中,构造器(松散得定义为Python解释器和标准库)可能打算建立自己的魔法属性列表,用户代码通常应该限制将这种约定作为己用。欲成为构造器的一部分的用户代码可以在下滑线中结合使用短前缀,例如:

_bobo_magic_attr__。

说明:命名约定

应避免的名字。永远不要用字符‘l’(小写字母el(就是读音,下同)),‘O’(大写字母oh),或‘I’(大写字母eye)作为单字符的变量名。在某些字体中这些字符不能与数字1和0分辨。试着在使用‘l’时用‘L’代替。

模块名

模块应该是不含下划线的,简短的,小写的名字。因为模块名被映射到文件名,有些文件系统大小写不敏感并且截短长名字,模块名被选为相当短是重要的,这在Unix上不是问题,但当代码传到Mac或Windows上就可能是个问题了。

当用C或C++编写的扩展模块有一个伴随Python模块提供高层(例如进一步的面向对象)接口时,C/C++模块有下划线前导(如:_socket)。Python包应该是不含下划线的,简短的,全小写的名字。

类名

几乎不出意料,类名使用CapWords约定。内部使用的类外加一个前导下划线。

异常名

如果模块对所有情况定义了单个异常,它通常被叫做“error”或“Error”。似乎内建(扩展)的模块使用“error”(例如:os.error),而Python模块通常用“Error”(例如:xdrlib.Error)。趋势似乎是倾向使用CapWords异常名。

全局变量名

(让我们祈祷这些变量仅在一个模块的内部有意义)

这些约定和在函数中的一样。模块是被设计为通过“from M import *”来使用的,必须用一个下划线作全局变量(及内部函数和类)的前缀防止其被导出(exporting)。

函数名

函数名应该为小写,可能用下划线风格单词以增加可读性。mixedCase仅被允许用于这种风格已经占优势的上下文(如:threading.py),以便保持向后兼容。

方法名和实例变量

这段大体上和函数相同:通常使用小写单词,必要时用下划线分隔增加可读性。仅为不打算作为类的公共界面的内部方法和实例使用一个前导下划线,Python不强制要求这样:它取决于程序员是否遵守这个约定。

使用两个前导下划线以表示类私有的名字,Python将这些名字和类名连接在一起:如果类Foo有一个属性名为_a,它不能以Foo._a访问。(固执的用户还是可以通过Foo._Foo__a得到访问权。)

通常双前导下划线仅被用于避免含子类的类中的属性名的名字冲突。

继承的设计

始终要确定一个类中的方法和实例变量是否要被公开。通常,永远不要将数据变量公开,除非你实现的本质上只是记录,人们几乎总是更喜欢代之给出一个函数作为类的界面(Python 2.2 的一些开发者在这点上做得非常漂亮)。

同样,确定你的属性是否应为私有的。私有和非私有的区别在于模板将永远不会对原有的类(导出类)有效,而后者可以。你应该在大脑中就用继承设计好了你的类,私有属性必须有两个前导下划线,无后置下划线,非公有属性必须有一个前导下划线,无后置下划线,公共属性没有前导和后置下划线,除非它们与保留字冲突,在此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass。

最后一点有些争议:如果相比class_你更喜欢klass,那么这只是一致性问题。

设计建议

单个元素(singletons)的比较,如None 应该永远用:‘is’或‘is not’来做。当你本意是“if x is not None”时,对写成“if x”要小心。例如当你测试一个默认为None的变量或参数是否被设置为其它值时,这个值也许在布尔上下文(Boolean context)中是false!

基于类的异常总是好过基于字符串的异常。模块和包应该定义它们自己的域内特定的基异常类,基类应该是内建的Exception类的子类。还始终包含一个类的文档字符串。例如:#!Python

class MessageError(Exception):

"""Base class for errors in the email package。"""

使用字符串方法(methods)代替字符串模块,除非必须向后兼容Python 2.0以前的版本。字符串方法总是非常快,而且和unicode字符串共用同样的API(应用程序接口)在检查前缀或后缀时避免对字符串进行切片。用startswith()和endswith()代替,因为它们是明确的并且错误更少。例如:

No:if foo[:3] == 'bar':

Yes:if foo。startswith('bar'):

例外是如果你的代码必须工作在Python 1.5.2 (但是我们希望它不会发生!),对象类型的比较应该始终用isinstance()代替直接比较类型,例如:

No:if type(obj) is type(1):

Yes:if isinstance(obj,int):

检查一个对象是否是字符串时,紧记它也可能是unicode字符串!在Python 2.3,str和unicode有公共的基类,basestring,所以你可以这样做:

if isinstance(obj,basestring):

在Python 2.2类型模块为此定义了StringTypes类型,例如:

#!Python

from types import StringTypes

if isinstance(obj,StringTypes):

在Python 2.0和2.1,你应该这样做:

#!Python

from types import StringType,UnicodeType

if isinstance(obj,StringType) or \

isinstance(obj,UnicodeType) :

对序列,(字符串,列表,元组),使用空列表是false这个事实,因此“if not seq”或“if seq”比“if len(seq)”或“if not len(seq)”好。书写字符串文字时不要依赖于有意义的后置空格。这种后置空格在视觉上是不可辨别的,并且有些编辑器(特别是近来,reindent.py)会将它们修整掉。不要用==来比较布尔型的值以确定是True或False(布尔型是Pythn 2.3中新增的)

No:if greeting == True:

Yes:if greeting:

No:if greeting == True:Yes:if greeting:

PEP8Python编码规范.doc

PEP8 Python 编码规范 1代码编排 1.1 缩进。 4 个空格的缩进(编辑器都可以完成此功能),不使用 Tap,更不能混合使 用 Tap 和空格。 1.2 每行最大长度 79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的 后边敲回车。 1.3 类和 top-level 函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无 关段落之间空一行;其他地方尽量不要再空行。 2文档编排 2.1 模块内容的顺序:模块说明和docstring — import — globals&constants —其他定义。 其中 import 部分,又按标准、三方和自己编写顺序依次排放,之间空一行。 2.2 不要在一句 import 中多个库,比如 import os, sys 不推荐。 2.3 如果采用 from XX import XX 引用库,可以省略‘ module. ’,都是可能出现命名冲 突,这时就要采用 import XX 。 3空格的使用 总体原则,避免不必要的空格。 3.1 各种右括号前不要加空格。 3.2 逗号、冒号、分号前不要加空格。 3.3 函数的左括号前不要加空格。如Func(1)。 3.4 序列的左括号前不要加空格。如list[2] 。 3.5 操作符左右各加一个空格,不要为了对齐增加空格。 3.6 函数默认参数使用的赋值符左右省略空格。 3.7 不要将多句语句写在同一行,尽管使用‘;’允许。 3.8 if/for/while 语句中,即使执行语句只有一句,也必须另起一行。 4注释 总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就 是要修改注释!注释必须使用英文,最好是完整的句子,首字母大写,句后要有结 束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。 4.1块注释,在一段代码前增加的注释。在‘ #’后加一空格。段落之间以只有‘#’的行间 隔。比如: #Description : Module config. # #Input : None # # Output : None 4.2行注释,在一句代码后加注释。比如:x = x + 1# Increment x 但是这种方式尽量少使用。 4.3避免无谓的注释。

python的中文处理

Python的中文处理 一、使用中文字符 在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子: #!/usr/bin/env python # -*- coding: cp936 -*- Python Tutorial中指出,python的源文件可以编码ASCII以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集: # -*- coding: encoding -*- 根据这个声明,Python会尝试将文件中的字符编码转为encoding编码,并且,它尽可能的将指定地编码直接写成Unicode文本。 注意,coding:encoding只是告诉Python文件使用了encoding格式的编码,但是编辑器可能会以自己的方式存储.py文件,因此最后文件保存的时候还需要编码中选指定的ecoding 才行。 二、中文字符的存储 >>> str = u"中文" >>> str u'\xd6\xd0\xce\xc4' >>> str = "中文" >>> str '\xd6\xd0\xce\xc4' u"中文"只是声明unicode,实际的编码并没有变。这样子就发生变化了: >>> str = "中文" >>> str '\xd6\xd0\xce\xc4' >>> str = str.decode("gb2312") >>> str u'\u4e2d\u6587' 更进一步: >>> s = '中文' >>> s.decode('gb2312') u'\u4e2d\u6587' >>> len(s) 4 >>> len(s.decode('gb2312')) 2 >>> s = u'中文'

(完整版)Python开发编码规范

Python开发编码规范

目录 1代码的布局 (3) 1.1缩进 (3) 1.2制表符还是空格? (3) 1.3行的最大长度 (3) 1.4空行 (3) 2编码 (4) 2.1导入 (4) 2.2空格 (5) 2.3其它建议(Other Recommendations) (6) 2.4注释 (7) 2.4.1注释块 (7) 2.4.2行内注释 (7) 2.5文档化 (8) 2.6版本注记 (9) 2.7命名约定 (9) 2.7.1描述:命名风格 (10) 2.7.2说明:命名约定 (11) 2.7.3应避免的名字 (11) 2.7.3.1模块名(Module Names) (11) 2.7.3.2类名(Class Names) (11) 2.7.3.3异常名(Exception Names) (11) 2.7.3.4全局变量名(Global Variable Names) (12) 2.7.3.5函数名(Function Names) (12) 2.7.3.6方法名和实例变量(Method Names and Instance Variables) (12) 2.7.3.7继承的设计(Designing for inheritance) (12) 3设计建议(Programming Recommendations) (13)

1代码的布局 1.1缩进 使用Emacs的Python-mode的默认值:4个空格一个缩进层次。对于确实古老的代码,你不希望产生混乱,可以继续使用8空格的制表符(8-space tabs)。 Emacs Python-mode自动发现文件中主要的缩进层次,依此设定缩进参数。 1.2制表符还是空格? 永远不要混用制表符和空格。最流行的Python缩进方式是仅使用空格, 其次是仅使用制表符。混合着制表符和空格缩进的代码将被转换成仅使用空格。(在Emacs中,选中整个缓冲区,按ESC-x去除制表符(untabify)。) 调用python命令行解释器时使用-t选项,可对代码中不合法得混合制表符和空格发出警告(warnings)。使用-tt时警告(warnings)将变成错误(errors)。这些选项是被高度推荐的。对于新的项目,强烈推荐仅使用空格(spaces-only)而不是制表符。许多编辑器拥有使之易于实现的功能。(在Emacs中,确认indent-tabs-mode是nil)。 1.3行的最大长度 周围仍然有许多设备被限制在每行80字符;而且,窗口限制在80个字符使将多个窗口并排放置成为可能。在这些设备上使用默认的折叠(wrapping)方式看起来有点丑陋。因此,请将所有行限制在最大79字符(Emacs准确得将行限制为长80字符), 对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符。折叠长行的首选方法是使用Pyhon支持的圆括号,方括号(brackets)和花括号(braces)内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号, 但是有时使用反斜杠看起来更好。确认恰当得缩进了延续的行。Emacs的Python-mode正确得完成了这些。一些例子: Toggle line numbers 1 class Rectangle(Blob): 2 3 def __init__(self, width, height, 4 color='black', emphasis=None, highlight=0): 5 if width == 0 and height == 0 and \ color == 'red' and emphasis == 'strong' or \ highlight > 100: 6 raise ValueError, "sorry, you lose" 7 if width == 0 and height == 0 and (color == 'red' or 8 emphasis is None): 9 raise ValueError, "I don't think so" 10 Blob。__init__(self, width, height, 11 color, emphasis, highlight) 1.4空行 用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割。 额外的空行可被用于(保守的(sparingly))分割相关函数组成的群(groups of

Python基本操作题

1.请补充横线处的代码,让Python 帮你随机选一个饮品吧! import ____①____ (1) listC = ['加多宝','雪碧','可乐','勇闯天涯','椰子汁'] print(random. ____②____ (listC)) 参考答案: import random (1) listC = ['加多宝','雪碧','可乐','勇闯天涯','椰子汁'] print(listC)) 2.请补充横线处的代码,listA中存放了已点的餐单,让Python帮你增加一个“红烧肉”,去掉一个“水煮干丝”。 listA = ['水煮干丝','平桥豆腐','白灼虾','香菇青菜','西红柿鸡蛋汤'] listA. ____①____ ("红烧肉") ②____ ("水煮干丝") print(listA) 参考代码: listA = ['水煮干丝','平桥豆腐','白灼虾','香菇青菜','西红柿鸡蛋汤'] ("红烧肉") ("水煮干丝") print(listA) 3.请补充横线处的代码。dictMenu中存放了你的双人下午套餐(包括咖啡2份和点心2份)的价格,让Python帮忙计算并输出消费总额。 dictMenu = {'卡布奇洛':32,'摩卡':30,'抹茶蛋糕':28,'布朗尼':26} ___①____ for i in ____②____: sum += i print(sum) 参考代码: dictMenu = {'卡布奇洛':32,'摩卡':30,'抹茶蛋糕':28,'布朗尼':26} sum = 0 for i in (): sum += i print(sum) 4.获得输入正整数 N,反转输出该正整数,不考虑异常情况。 参考代码: N = input() print(N[::-1]) 5. 给定一个数字123456,请采用宽度为25、右对齐方式打印输出,使用加号“+”填充。 参考代码: print("{:+>25}".format(123456)) 6.给定一个数字.9,请增加千位分隔符号,设置宽度为30、右对齐方式打印输出,使用空格填充。 参考代码:

python字符串内置函数

a='helLO' print(a.title()) # 首字母大写a='1 2'

执行结果:1 2 1 2 1 2 00000001 2 1 2 3 4 5 6 7 8 # 3 字符串搜索相关 .find() # 搜索指定字符串,没有返回-1 .index() # 同上,但是找不到会报错 .rfind() # 从右边开始查找 .count() # 统计指定的字符串出现的次数 # 上面所有方法都可以用index代替,不同的是使用index查找不到会抛异常,而find s='hello world' print(s.find('e')) # 搜索指定字符串,没有返回-1 print(s.find('w',1,2)) # 顾头不顾尾,找不到则返回-1不会报错,找到了 则显示索引 print(s.index('w',1,2)) # 同上,但是找不到会报错 print(s.count('o')) # 统计指定的字符串出现的次数 print(s.rfind('l')) # 从右边开始查找 # 4字符串替换 .replace('old','new') # 替换old为new .replace('old','new',次数) # 替换指定次数的old为new s='hello world' print(s.replace('world','python')) print(s.replace('l','p',2)) print(s.replace('l','p',5)) 执行结果: hello python heppo world heppo worpd

# 5字符串去空格及去指定字符 .strip() # 去两边空格 .lstrip() # 去左边空格 .rstrip() # 去右边空格 .split() # 默认按空格分隔 .split('指定字符') # 按指定字符分割字符串为数组 s=' h e-l lo ' print(s) print(s.strip()) print(s.lstrip()) print(s.rstrip()) print(s.split('-')) print(s.split()) # 6字符串判断相关 .startswith('start') # 是否以start开头 .endswith('end') # 是否以end结尾 .isalnum() # 是否全为字母或数字 .isalpha() # 是否全字母 .isdigit() # 是否全数字 .islower() # 是否全小写 .isupper() # 是否全大写 .istitle() # 判断首字母是否为大写 .isspace() # 判断字符是否为空格 # 补充 bin() # 十进制数转八进制 hex() # 十进制数转十六进制 range() # 函数:可以生成一个整数序列 type() # 查看数据类型 len() # 计算字符串长度 format() # 格式化字符串,类似%s,传递值能多不能少

【IT专家】Python-分割字符串,尊重和保留引号[重复]

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Python:分割字符串,尊重和保留引号[重复] Python:分割字符串,尊重和保留引号[重复][英]Python: Split a string, respect and preserve quotes [duplicate]Using python, I want to split the following string: ?使用python,我想拆分如下字符串: a=foo, b=bar, c=“foo, bar”, d=false, e=“false” This should result in the following list: 这应导致下列清单: ?[‘a=foo’, ‘b=bar’, ‘c=“foo, bar”‘, ‘d=false’, ‘e=“false’”‘] When using shlex in posix-mode and splitting with “, “, the argument for cgets treated correctly. However, it removes the quotes. I need them because false is not the same as “false”, for instance. ?当在posix模式下使用shlex并使用“,”拆分时,clex的参数得到了正确的处理。但是,它删除了引号。我需要它们,因为false和false不一样。 My code so far: ?到目前为止我的代码: ?import shlexmystring = ‘a=foo, b=bar, c=“foo, bar”, d=false, e=“false”‘splitter = shlex.shlex(mystring, posix=True)splitter.whitespace += ‘,’splitter.whitespace_split = Trueprint list(splitter) # [‘a=foo’, ‘b=bar’, ‘c=foo, bar’, ‘d=false’, ‘e=false’] 19 s = r’a=foo, b=bar, c=“foo, bar”, d=false, e=“false”, f=“foo\”, bar”‘ re.findall(e (?: | )+ matches a sequence of non-delimiters and quoted strings, which is the desired result. 将模式2和3组合在一起(?: |)+匹配一个非分隔符和引号字符串序列,这是期望的结果。0 ?Regex can solve this easily enough: ?Regex可以很容易地解决这个问题: ?import remystring = ‘a=foo, b=bar, c=“foo, bar”, d=false, e=“false”‘splitString = re.split(‘,?\s(?=\w+=)’,mystring) The regex pattern here looks for a whitespace followed by a word character and then an equals sign which splits your string as you desire and maintains any quotes.

Python编码规范

Python编码规范 这篇文档改编自Guido最初的《Python风格指南》一文,并从《Barry's style guide》中添加了部分内容。在有冲突的地方,Guide的风格规则应该是符合本PEP的意图(译注:指当有冲突时,应以Guido风格为准)。这篇PEP仍然尚未完成(实际上,它可能永远都不会完成)。 在这篇风格指导中的一致性是重要的。在一个项目内的一致性更重要。在一个模块或函数内的一致性最重要。但最重要的是:知道何时会不一致——有时只是没有实施风格指导。当出现疑惑时,运用你的最佳判断,看看别的例子,然后决定怎样看起来更好。并且要不耻下问!代码的布局 缩进 使用Emacs的Python-mode的默认值:4个空格一个缩进层次。对于确实古老的代码,你不希望产生混乱,可以继续使用8空格的制表符(8-space tabs)。Emacs Python-mode自动发现文件中主要的缩进层次,依此设定缩进参数。 制表符还是空格 永远不要混用制表符和空格。最流行的Python缩进方式是仅使用空格,其次是仅使用制表符,混合着制表符和空格缩进的代码将被转换成仅使用空格。(在Emacs中,选中整个缓冲区,按ESC-x去除制表符。)调用Python命令行解释器时使用-t选项,可对代码中不合法得混合制表符和空格发出警告,使用-tt时警告将变成错误。这些选项是被高度推荐的。 对于新的项目,强烈推荐仅使用空格而不是制表符。许多编辑器拥有使之易于实现的功能(在Emacs中,确认indent-tabs-mode是nil)。 行的最大长度 周围仍然有许多设备被限制在每行80字符:而且,窗口限制在80个字符。使将多个窗口并排放置成为可能。在这些设备上使用默认的折叠方式看起来有点丑陋。因此,请将所有行限制在最大79字符(Emacs准确得将行限制为长80字符),对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符。 折叠长行的首选方法是使用Pyhon支持的圆括号,方括号和花括号内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好,确认恰当得缩进了延续的行。

Python 的内置字符串方法

字符串处理是非常常用的技能,但Python 内置字符串方法太多,常常遗忘,为了便于快速参考,特地依据Python 3.5.1 给每个内置方法写了示例并进行了归类,便于大家索引。 PS: 可以点击概览内的绿色标题进入相应分类或者通过右侧边栏文章目录快速索引相应方法。 概览 字符串大小写转换 ?str.capitalize() ?str.lower() ?str.casefold() ?str.swapcase() ?str.title() ?str.upper() 字符串格式输出 ?str.center(width[, fillchar]) ?str.ljust(width[, fillchar]); str.rjust(width[, fillchar]) ?str.zfill(width) ?str.expandtabs(tabsize=8)

?str.format(^args, ^^kwargs) ?str.format_map(mapping) 字符串搜索定位与替换 ?str.count(sub[, start[, end]]) ?str.find(sub[, start[, end]]); str.rfind(sub[, start[, end]]) ?str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]]) ?str.replace(old, new[, count]) ?str.lstrip([chars]); str.rstrip([chars]); str.strip([chars]) ?static str.maketrans(x[, y[, z]]); str.translate(table) 字符串的联合与分割 ?str.join(iterable) ?str.partition(sep); str.rpartition(sep) ?str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1) ?str.splitlines([keepends]) 字符串条件判断 ?str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]]) ?str.isalnum() ?str.isalpha() ?str.isdecimal(); str.isdigit(); str.isnumeric() ?str.isidentifier()

2018最新Python编程规范

Python编程规范 签署:(管理者代表) 日期: 修订记录

目录 1.Purpose目的 (4) 2.Scope适用范围 (4) 3.Roles and Responsibilities角色和职责 (4) 4.Procedure程序要求 (4) 4.1General Requirements总要求 (4) 4.2总则 (5) 5.Reference Documents参考文档 (7) 5.1External Reference外部参考文档 (7) 5.2 Internal Reference内部参考文档 (7) 5.3 Record记录模板 (8) 6.Terms and Definitions缩略语和定义 (8) 6.1 Definitions定义 (8) 6.2 Acronym缩略语 (8)

1. Purpose目的 本程序文件指导Python代码编写,旨在通过程序文件规范编码,通过编码规范来提高代码质量、代码可读性和可维护性。 2. Scope适用范围 本程序文件适用于开发部项目开发过程中所有Python代码。 3. Roles and Responsibilities角色和职责 4. Procedure程序要求 4.1 G eneral Requirements总要求 1、对于命名的规则,各模块负责人应能给出各自明确的命名规则。 2、对于错误的处理机制和要求,各模块负责人应能给出明确的要 求。 3、对于各自的日志处理,各位模块负责人最好能把日志消息分为 高、中、低或其他形式不同的等级,同时对日志有明确的要求。 4、项目组内多人开发时,需要统一变量命名规则,保持风格的一 致性。 5、本规范分为强制规范和推荐规范,强制规范以黑色字体表示, 推荐规范以蓝色字体表示。

python字符串常用函数

字符串常用函数 replace(string,old,new[,maxsplit]) 字符串的替换函数,把字符串中的old替换成new。默认是把string中所有的old值替换成new 值,如果给出maxsplit值,还可控制替换的个数,如果maxsplit为1,则只替换第一个old 值。 >>>a="11223344" >>>print string.replace(a,"1","one") oneone2223344 >>>print string.replace(a,"1","one",1) one12223344 capitalize(string) 该函数可把字符串的首个字符替换成大字。 >>> import string >>> print string.capitalize("python") Python split(string,sep=None,maxsplit=-1) 从string字符串中返回一个列表,以sep的值为分界符。 >>> import string >>> ip="192.168.3.3" >>> ip_list=string.split(ip,'.') >>> print ip_list ['192', '168', '3', '3'] all( iterable) 如果迭代的所有元素都是真就返回真。 >>> l = [0,1,2,3] >>> all(l) Flase >>> l = [1,2,3] >>> all(l) True any( iterable) 如果迭代中有一个元素为真就返回真。 >>> l = [0,1,2,3] >>> all(l) True >>> l = [1,2,3] >>> all(l) True basestring() 这个抽象类型是str和unicode的父类。它不能被调用或初始化,但是它可以使用来测试一

Python内置的字符串处理函数整理字符串长度获取

Python内置的字符串处理函数整理字符串长度获取:len(str)例:print'%slengt By xuanfeng6666 at 2014-06-01 139 阅读 0 回复 0.0 希赛币 Python内置的字符串处理函数整理 ?字符串长度获取:len(str) 例:print '%s length=%d' % (str,len(str)) ?字母处理 全部大写:str.upper() 全部小写:str.lower() 大小写互换:str.swapcase() 首字母大写,其余小写:str.capitalize() 首字母大写:str.title() print '%s lower=%s' % (str,str.lower()) print '%s upper=%s' % (str,str.upper()) print '%s swapcase=%s' % (str,str.swapcase()) print '%s capitalize=%s' % (str,str.capitalize()) print '%s title=%s' % (str,str.title()) ?格式化相关 获取固定长度,右对齐,左边不够用空格补齐:str.rjust(width) 获取固定长度,左对齐,右边不够用空格补齐:str.ljust(width) 获取固定长度,中间对齐,两边不够用空格补齐:str.center(width) 获取固定长度,右对齐,左边不足用0补齐.zfill(width) print '%s ljust=%s' % (str,str.ljust(20))

Python如何针对任意多的分隔符拆分字符串操作

Python如何针对任意多的分隔符拆分字符串操作 本篇文章小编和大家分享一下Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作,文中会结合实例形式进行分析Python使用split()及正则表达式进行字符串拆分操作相关实现技巧,对Python开发感兴趣或者是想要学习Python开发技术的小伙伴可以参考下哦。 问题:将分隔符(以及分隔符之间的空格)不一致的字符串拆分为不同的字段。 解决方案:使用更为灵活的re.split()方法,该方法可以为分隔符指定多个模式。 说明:字符串对象的split()只能处理简单的情况,而且不支持多个分隔符,对分隔符周围可能存在的空格也无能为力。 # example.py # # Example of splitting a string on multiple delimiters using a regex import re #导入正则表达式模块 line = 'asdf fjdk; afed, fjek,asdf, foo' # (a) Splitting on space, comma, and semicolon parts = re.split(r'[;,\s]\s*', line) print(parts) # (b) 正则表达式模式中使用“捕获组”,需注意捕获组是否包含在括号中,使用捕获组导致匹配的文本也包含在最终结果中 fields = re.split(r'(;|,|\s)\s*', line) print(fields) # (c) 根据上文的分隔字符改进字符串的输出 values = fields[::2] delimiters = fields[1::2] delimiters.append('') print('value =', values) print('delimiters =', delimiters) newline = ''.join(v+d for v,d in zip(values, delimiters)) print('newline =', newline) # (d) 使用非捕获组(?:...)的形式实现用括号对正则表达式模式分组,且不输出分隔符 parts = re.split(r'(?:,|;|\s)\s*', line)

python,函数规范

竭诚为您提供优质文档/双击可除 python,函数规范 篇一:简明python编程规范 简明python编程规范 编码 所有的python脚本文件都应在文件头标上 #-*-coding:utf-8-*-。设置编辑器,默认保存为utf-8格式。 注释 业界普遍认同python的注释分为两种的概念,一种是由#开头的“真正的”注释,另一种是docstrings。前者表明为何选择当前实现以及这种实现的原理和难点,后者表明如何使用这个包、模块、类、函数(方法),甚至包括使用示例和单元测试。 坚持适当注释原则。对不存在技术难点的代码坚持不注释,对存在技术难点的代码必须注释。但与注释不同,推荐对每一个包、模块、类、函数(方法)写docstrings,除非代码一目了然,非常简单。 缩进

python依赖缩进来确定代码块的层次,行首空白符主要有两种:tab和空格,但严禁两者混用。如果使用tab缩进,设定tab为4个空格。 公司内部推荐使用4个空格的tab进行缩进。 空格 空格在python代码中是有意义的,因为python的语法依赖于缩进,在行首的空格称为前导空格。在这一节不讨论前导空格相关的内容,只讨论非前导空格。非前导空格在python代码中没有意义,但适当地加入非前导空格可以增进代码的可读性。 1)在二元算术、逻辑运算符前后加空格:如a=b+c; 2)在一元前缀运算符后不加空格,如if!flg:pass; 3)“:”用在行尾时前后皆不加空格,如分枝、循环、函数和类定义语言;用在非行尾时两端加空格,如dict对象的定义d={‘key’:’value’}。 4)括号(含圆括号、方括号和花括号)前后不加空格,如do_something(arg1,arg2),而不是 do_something(arg1,arg2); 5)逗号后面加一个空格,前面不加空格;s 空行 适当的空行有利于增加代码的可读性,加空行可以参考如下几个准则:

【IT专家】python 字符串操作

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 python 字符串操作 2017/08/24 0 name=“My \t name is {name} and age is {age}”print(name.capitalize()) #将name的值首字母大写print(name.count(“a”)) #输出a这个字符的出现的个数print(name.center(50,”-”)) #一共打印50个,其他用-代替print(name.endswith(“ex”)) #结尾是否包含exprint(name.expandtabs(tabsize=30)) #将字符串中的\t 转化为30个空格print(name[name.find(“name”):]) #find查找的意思字符串也可以进行切片,返回的结果为name及后面的一行内容 print(name.format(name=“wang”,age=23))print(name.format_map({“name”:”wang”,”age ”:23})) #字典的格式。。和format的结果一样print(“ab123”.isalnum()) #判断是否包含字母和数字,如果包含则返回为trueprint(“ab124”.isalpha()) #判断是否包含纯英文字符,如果是则返回为true,大小写不区分print(“122”.isdigit()) #判断是否为整数,如果为整数则返回为trueprint(“al1”.isidentifier()) #判断是不是一个合法的标识符(就是判断是不是合法的变量名)print(“aLL”.islower()) #判断是不是小写,是则返回trueprint(“aLL”.isnumeric()) #判断是不是数字,是则返回trueprint(“aLL”.isspace()) #判断是不是空格print(“My Name Is “.istitle()) #判断每个字符串的首字母大写,是的话就为trueprint(“my name is “.isupper())#判断是否是大写print(‘+’.join([‘1’,’2’,’3’])) #将列表的值转变为字符串的形式这个输出结果为:1+2+3print(name.ljust(50,”*”))print(name.rjust(50,”*”))print(“WANG”.lower())#将大写变成小写print(“wang”.upper()) #将小写边城大写print(“\nwang”.lstrip()) #取消左边的空格和回车print(“wang1\n”.rstrip())#去掉右边的空格和回车print(“ \nabng\n”.strip())#将左边和右边的空格和回车都去掉print(“wang han”.replace(‘a’,’A’,1))#将字符串中的a替换为大写的A,只替换其中一个print(‘wang wang’.rfind(‘a’)) #找到最右边的那个字符的下标print(‘1+2+3+4’.split(‘+’)) #以+号为分隔符,输出为列表的格式print(‘wang LI’.swapcase()) #将大写小反转print(‘wang han’.title()) #将每个字符串的首字母大写 ?tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

Python-字符串操作方法

Python-字符串操作方法(转) Posted on 2008-09-05 19:22 ∈鱼杆阅读(2111) 评论(1) 编辑收藏网摘所属分类: Python Python-String-Function 字符串中字符大小写的变换: * S.lower() #小写 * S.upper() #大写 * S.swapcase() #大小写互换 * S.capitalize() #首字母大写 * String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起 * S.title() #只有首字母大写,其余为小写,模块中没有这个方法 字符串在输出时的对齐: * S.ljust(width,[fillchar]) #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。 * S.rjust(width,[fillchar]) #右对齐 * S.center(width, [fillchar]) #中间对齐 * S.zfill(width) #把S变成width长,并在右对齐,不足部分用0补足 字符串中的搜索和替换: * S.find(substr, [start, [end]]) #返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索 * S.index(substr, [start, [end]]) #与find()相同,只是在S中没有substr时,会返回一个运行时错误 * S.rfind(substr, [start, [end]]) #返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号 * S.rindex(substr, [start, [end]]) * S.count(substr, [start, [end]]) #计算substr在S中出现的次数 * S.replace(oldstr, newstr, [count]) #把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换 * S.strip([chars]) #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None * S.lstrip([chars]) * S.rstrip([chars]) * S.expandtabs([tabsize]) #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个 字符串的分割和组合: * S.split([sep, [maxsplit]]) #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符

Python开发编码规范

Python开发编码规范 --- hoxide 初译 dreamingk 校对发布 040724 --- xyb 重新排版 040915 RedWolf pdf整理 080807 PEP: 8 Title: Style Guide for Python Code Version: 63990 Last-Modified:2008-06-06 20:48:49 +0200 (Fri, 06 Jun 2008) Author: Guido van Rossum , Barry Warsaw Status:Active Type: Process Created: 05-Jul-2001 Post-History:05-Jul-2001 网址: https://www.360docs.net/doc/7515680181.html,/moin/Python开发编码规范https://www.360docs.net/doc/7515680181.html,/dev/peps/pep-0008/

目 录 介绍 (Introduction) 1 愚蠢得使用一致性是无知的妖怪 2 ( A Foolish Consistency is the Hobgoblin of Little Minds) 代码的布局 ( Code lay-out ) 3 3.1. 缩进(Indentation) 3.2. 制表符还是空格 (Tabs or Spaces)? 3.3. 行的最大长度 (Maximum Line Length) 3.4. 空行 (Blank Lines) 3.5. 编码 (Encodings)(PEP 263) 导入 (Imports) 4 表达式和语句中的空格 5 (Whitespace in Expressions and Statements) 5.1. 其它建议 (Other Recommendations) 注释 (Comments) 6 6.1. 注释块 (Block Comments) 6.2. 行内注释 (Inline Comments) 文档字符串 (Documentation Strings) 7 版本注记 (Version Bookkeeping) 8 9 命名约定 (Naming Conventions) 9.1. 描述 :命名风格 (Descriptive: Naming Styles) 9.2. 说明 :命名约定 (Prescriptive: Naming Conventions) 9.2.1. 应避免的名字 (Names to Avoid) 9.2.2. 模块名 (Module Names) 9.2.3. 类名 (Class Names) 9.2.4. 异常名 (Exception Names) 9.2.5. 全局变量名 (Global Variable Names) 9.2.6. 函数名 (Function Names) 9.2.7. 方法名和实例变量 (Method Names and Instance Variables) 9.2.8. 继承的设计 (Designing for inheritance) 10 设计建议 (Programming Recommendations)

Python程序设计基础教案14--字符串函数

授课教案

授课教案附页 教学设计说明一、旧课回顾 ?字符串在内存中的存放形式:s = 'Hello World' ?字符串s的长度的获取:len(s) ?字符串中的字符是从0开始编号的,字符串中第一个字符的序号是0,最后一个字符的序号是len(s)-1,所以最后一个字符是s[len(s)-1]. ?字符和编码的转换: ?大小写字母的转换: 大写字母X转小写字母x:ord(‘X’)+chr(ord(‘a’)-ord(‘A’)) 小写字母x转大写字母X:ord(‘x’)-ord(‘a’))+chr(ord(‘A’) ?练习: 对任意一个字符串,将它反向显示。例如:输入字符串‘hello world’,输 出‘dlrow olleh’。 分析: 字符串中的字符是从0开始编号的,字符串显示是从第0个字符开始,一直 到第len(s)-1个字符; 要将字符串反向显示,只需要先显示第len(s)-1个字符,再显示第len(s)-2个 字符,... ,最后显示第0个字符即可。 很明显,使用for循环可以很容易实现。从第len(s)-1个字符开始, start=len(s)-1,到第0个字符为止,stop=0 - 1= -1,步长step = -1.

代码示例: 注意:step>0时,到谁为止,stop = 谁+1;step<0时,到谁为止,stop=谁-1. 二、字符串的比较 ?两个字符串a,b可以比较大小,比较规则是按各个对应字符的Unicode编码,编码大的一个为大。 ?比较a[0]和b[0],如果a[0]>b[0]则a>b,如果a[0]b[1]则a>b,如果a[1]len(b)则a>b;如果len(a)=’A’and 该字符<=’Z’是否成立,若成立,则该字符为大写字母,否则不是大写字母; 同理,判断一个字符是否为小写字母,只需要判断条件:该字符>=’a’and 该字符<=’z’是否成立,若成立,则该字符为小写字母,否则不是小写字母;

相关文档
最新文档