注释
任何存在于#右侧的语句都是注释,可以单独一行,也可接在编程语句后面
如: print('hello world') #打印hello world
# 打印hello world
print('hello world')
在哪些地方应该注释呢?主要有以下几点:
解释假设
说明重要的决定
解释重要的细节
说明你想要解决的问题
说明你想要在程序中克服的问题,等等。
要尽量做到代码会告诉你怎么做,注释会告诉你为何如此。
字面常量(Literal Constants)
如:
5 、 1.23
或者:
这是一串文本 、 This is a string
这些总是表示它本身而非其他含义——它是一个常量,因为它的值不能被改变。因此,所有的这
些都被称作字面常量。
数字
数字主要分为两种类型——整数(Integers)与浮点数(Floats)。
注意:在Python中是没有单独的long类型的,int类型可以指任何大小的整数。
字符串(String)
一串字符串(String)是字符(Characters)的序列(Sequence)。
单引号
可以使用单引号来指定字符串,例如 '将我这样框进来' 或 'Quote me on this' 。
注意:所有引号内的空间,诸如空格与制表符,都将按原样保留。
双引号
被双引号包括的字符串和被单引号括起的字符串其工作机制完全相同。
例如 : "你的名字是?" 或"What's your name?" 。
三引号
可以通过使用三个引号—— """ 或 ''' 来指定多行字符串。可以在三引号之间自由地使用单引号与双引号。
如:
'''这是一段多行字符串。这是它的第一行。
This is the second line.
"What's your name?," I asked.
He said "LiLi."
'''
字符串是不可变的
这意味着一旦你创造了一串字符串,你就不能再改变它。尽管这看起来像是一件坏事,但实际上并非如此。
注意:
针对 C/C++ 程序员的提示:
Python 中没有单独的 char 数据类型。
针对 Perl/PHP 程序员的提示:
单引号括起的字符串和双引号括起的字符串是一样的——它们不存在任何区别。
格式化方法
有时候我们会想要从其他信息中构建字符串。这正是 format() 方法大有用武之地的地方。
将以下内容保存为文件 str_format.py :
age = 20
name = 'Tormi'
print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
输出:
Tormi was 20 years old when he wrote this book
Why is Tormi playing with that python?
此处 {0} 对应的是变量 name ,它是该格式化方法中的第一个参数;
{1} 对应的是变量 age ,它格式化方法中的第二个参数。
注意:Python 从 0 开始计数,这意味着索引中的第一位是 0,第二位是基础1,以此类推。
也可以通过联立字符串来表达相同的效果,如:
name + 'is' + str(age) + 'years old'
但这样实现是很丑陋的,而且也容易出错。
其次,转换至字符串的工作将由 format 方法自动完成,而不是如这般需要明确转至字符串。
再次,当时用 format 方法时,我们可以直接改动文字而不必与变量打交道,反之亦然。
同时还应注意数字只是一个可选选项,所以你同样可以写成:
age = 20
name = 'Swaroop'
print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that python?'.format(name))
在Python中format方法所做的事便是将每个参数值代替至格式所在位置,还有更详细的格式如下:
# 对于浮点数 '0.333' 保留小数点(.)后三位
print('{0:.3f}'.format(1.0/3))
# 使用下划线填充文本,并保持文字处于中间位置
# 使用 (^) 定义 '___hello___'字符串长度为 11
print('{0:_^11}'.format('hello'))
# 基于关键词输出 'Tormi wrote A Byte of Python'
print('{name} wrote {book}'.format(name='Tormi', book='A Byte of Python'))
输出如下:
0.333
___hello___
Swaroop wrote A Byte of Python
另外,要注意 print 总是会以一个不可见的“新一行”字符( \n )结尾,因此重复调用 print 将会在相互独立的一行中分打印。为防止打印过程中出现这一换行符,可以通过 end 指定其应以空白结尾:
print('a', end='')
print('b', end='')
输出如下:
ab
也可以通过end指定以空格结尾:
print('a', end=' ')
print('b', end=' ')
print('c')
输出结果:
a b c
转义序列
如果你希望生成一串包含单引号( ' )的字符串,例如,你想要的字符串是 "What's your name?" 。你不能指定 'What's your name?' ,因为这会使 Python 对于何处是字符串的开始、何处又是结束而感到困惑。
所以,你必须指定这个单引号不代表这串字符串的结尾。这可以通过 转义序列(Escape Sequence) 来实现。
通过\ 来指定单引号:要注意它可是反斜杠。现在,你可以将字符串指定为 'What\'s yourname?' 。
如果你想指定一串双行字符串该怎么办?一种方式即使用如前所述的三引号字符串,或者你可以使用一个表示新一行的转义序列—— \n 来表示新一行的开始。如下:
'This is the first line\nThis is the second line'
还有制表符:\t
另外,在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继续,但不会添加新的一行。如:
"This is the first sentence. \
This is the second sentence."
相当于:
"This is the first sentence. This is the second sentence."
原始字符串
如果需要指定一些未经过特殊处理的字符串,如转义序列,那么需要在字符串前面添加 r 或 R 来指定一个原始(Raw)字符串
如:
r"Newlines are indicated by \n"
注意:针对正则表达式用户的提示
在处理正则表达式时应全程使用原始字符串。否则,将会有大量 Backwhacking 需要处理。
例如,反向引用可以通过 '\\1' 或 r'\1' 来实现。
标识符命名
标识符(Identifiers) 是为 某些东西 提供的给定名称,如变量。在你命名标识符时,你需要遵守以下规则:
第一个字符必须是字母表中的字母(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)或下划线( _ )。
标识符的其它部分可以由字符(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)、下划线( _ )、数字(0~9)组成。
标识符名称区分大小写。例如, myname 和 myName 并不等同。
有效 的标识符名称可以是 i 或 name_2_3 ,
无效的标识符名称可能是 2things , this is spaced out , my-name 和 >a1b2_c3 。
对象
需要记住的是,Python 将程序中的任何内容统称为 对象(Object)。这是一般意义上的说法。我们以“某某对象(object)”相称,而非“某某东西(something)”。
注意:Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字、字符串与函数。
参考《简明 Python教程》