Python一些容易忽略的知识

自学Python一些容易忽略的知识

字符串

字符串是 字符的序列 。字符串基本上就是一组单词。

我几乎可以保证你在每个Python程序中都要用到字符串,所以请特别留心下面这部分的内容。

下面告诉你如何在Python中使用字符串。

●     使用单引号(')

你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制

表符都照原样保留。

●     使用双引号(")

在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。

●     使用三引号('''或""")

利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双

引号。例如:

'''This is a multi-line string. This is the firstline.

This is the second line.

"What's your name?," I asked.

He said "Bond, James Bond."

●     转义符

假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是What's your name?。你肯定不会用'What's your name?'来指示它,因为

Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'What\'s your name?'。

另一个表示这个特别的字符串的方法是"What's your name?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\\来指示反斜杠本身。

值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:

"This is the first sentence.\

This is the second sentence."

等价于"This is the first sentence. This is the secondsentence."

●     自然字符串

如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated

by \n"。

●     字符串是不可变的

这意味着一旦你创造了一个字符串,你就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么我们说它不是一个缺点。

●     按字面意义级连字符串

如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。例如,'What\'s'

'your name?'会被自动转为"What's your name?"。在Python中没有专门的char数据类型。确实没有需要有这个类型,我相信你不会为此而烦恼。 给Perl/PHP程序员的注释

记住,单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。 给正则表达式用户的注释

一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以

写成'\\1'或r'\1'。

对象

记住,Python把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。给面向对象编程用户的注释就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象。

我们将看一下如何使用变量和字面意义上的常量。保存下面这个例子,然后运行程序。

如何编写Python程序

下面是保存和运行Python程序的标准流程。

   1. 打开你最喜欢的编辑器。

   2. 输入例子中的程序代码。

   3. 用注释中给出的文件名把它保存为一个文件。我按照惯例把所有的Python程序都以扩展名.

py保存。

   4. 运行解释器命令python program.py或者使用IDLE运行程序。你也可以使用先前介绍的 可执

行的方法。

例使用变量和字面意义上的常量

# Filename : var.py

i = 5

print i

i = i + 1

print i

s = '''This is a multi-line string.

This is the second line.'''

print s

(源文件:code/var.py )

输出

$ python var.py

5

6

This is a multi-line string.

This is the second line.

 

缩进

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空

格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。

这意味着同一层次的语句必须有相同的缩进。每一组这样的语句为一个块。

你需要记住的一样东西是错误的缩进会引发错误。例如:

i = 5

 print 'Valueis', i # Error! Notice a single space at the start of the line

print 'I repeat, the value is', i

当你运行这个程序的时候,你会得到下面的错误:

  File"whitespace.py", line 4

    print 'Valueis', i # Error! Notice a single space at the start of the line

    ^

SyntaxError: invalid syntax

注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即

程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。

如何缩进 不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我建议你在每个缩进层次使用 单个制表符 或 两个或四个空格。选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。

 

逻辑行与物理行

物理行是你在编写程序时所 看见 的。逻辑行是Python 看见的单个语句。Python假定每个 物理

行对应一个 逻辑行 。

逻辑行的例子如print 'Hello World'这样的语句——如果它本身就是一行(就像你在编辑器中看

到的那样),那么它也是一个物理行。

默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。

如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:

i = 5

print i

与下面这个相同:

i = 5;

print i;

同样也可以写成:

i = 5; print i;

甚至可以写成:

i = 5; print i

然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一

个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我从来没有在Python程序中使用过或看到过分号。

下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。

s = 'This is a string. \

This continues the string.'

print s

它的输出:

This is a string. This continues the string.

类似地,

print \

i

与如下写法效果相同:

print i

有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆

括号、方括号或波形括号的时候。这被称为暗示的行连接。

函数

函数通过def关键字定义。def关键字后跟一个函数的标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。下面这个例子将说明这事实上是十分简单的:

定义函数

例定义函数

#!/usr/bin/python

# Filename: function1.py

def sayHello():

    print 'HelloWorld!' # block belonging to the function

sayHello() # call the function

(源文件:code/function1.py)

输出

$ python function1.py

Hello World!

它如何工作

我们使用上面解释的语法定义了一个称为sayHello的函数。这个函数不使用任何参数,因此在圆括号中没有声明任何变量。参数对于函数而言,只是给函数的输入,以便于我们可以传递不同的值给函数,然后得到相应的结果。

 

函数关键参数

如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。

这样做有两个 优势 ——一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、

假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。

使用关键参数

例使用关键参数

#!/usr/bin/python

# Filename: func_key.py

def func(a, b=5, c=10):

    print 'ais', a, 'and b is', b, 'and c is', c

func(3, 7)

func(25, c=24)

func(c=50, a=100)

(源文件:code/func_key.py)

输出

$ python func_key.py

a is 3 and b is 7 and c is 10

a is 25 and b is 5 and c is 24

a is 100 and b is 5 and c is 50

它如何工作

名为func的函数有一个没有默认值的参数,和两个有默认值的参数。

在第一次使用函数的时候, func(3, 7),参数a得到值3,参数b得到值7,而参数c使用默认值

10。

在第二次使用函数func(25, c=24)的时候,根据实参的位置变量a得到值25。根据命名,即关键

参数,参数c得到值24。变量b根据默认值,为5。

在第三次使用func(c=50, a=100)的时候,我们使用关键参数来完全指定参数值。注意,尽管函

数定义中,a在c之前定义,我们仍然可以在a之前指定参数c的值。

 

文档字符串DocStrings

Python有一个很奇妙的特性,称为 文档字符串 ,它通常被简称为 docstrings 。DocStrings是一个

重要的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用它。你甚至可以在程序

运行的时候,从函数恢复文档字符串!

使用DocStrings

例使用DocStrings

#!/usr/bin/python

# Filename: func_doc.py

def printMax(x, y):

    '''Printsthe maximum of two numbers.

    The twovalues must be integers.'''

    x = int(x) #convert to integers, if possible

    y = int(y)

    if x > y:

        print x,'is maximum'

    else:

        print y,'is maximum'

printMax(3, 5)

print printMax.__doc__

(源文件:code/func_doc.py)

输出

$ python func_doc.py

5 is maximum

Prints the maximum of two numbers.

        The twovalues must be integers.

它如何工作

在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类,我们会在后面相应的章节学习它们。

文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。

你可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。请记住Python把每一样东西 都作为对象,包括这个函数。如果你已经在Python中使用过help(),那么你已经看到过DocStings的使用了!它所做的只是抓

取函数的__doc__属性,然后整洁地展示给你。你可以对上面这个函数尝试一下——只是在你

的程序中包括help(printMax)。记住按q退出help。

自动化工具也可以以同样的方式从你的程序中提取文档。因此,我 强烈建议 你对你所写的任

何正式函数编写文档字符串。随你的Python发行版附带的pydoc命令,与help()类似地使用DocStrings

 

对象与引用

当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑

定。一般说来,你不需要担心这个,只是在引用上有些细微的效果需要你注意。

 

字典

字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无

法找到正确的信息。注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以把不可变或可变

的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。

记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己

对它们排序。

字典是dict类的实例/对象。

 

self

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是

在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本

身,按照惯例它的名称是self。

虽然你可以给这个参数任何名称,但是 强烈建议 你使用self这个名称——其他名称都是不赞成

你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self

的话,还有些IDE(集成开发环境)也可以帮助你。

给C++/Java/C#程序员的注释

Python中的self等价于C++中的self指针和Java、C#中的this参考。

你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清

晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法

MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

 

__init__方法

在Python的类中有很多方法的名字有特殊的重要意义。现在我们将学习__init__方法的意义。

__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希

望的初始化 。注意,这个名称的开始和结尾都是双下划线。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值