Python指南--初步认识Python

原创 2003年09月15日 09:27:00
?

子目录



?
3. Python
的非正式介绍

在后面的例子中,区分输入和输出的方法是看是否有提示符(“>>>?和“..?):想要重复这些例子的话,你就要在提示符显示后输入所有的一切;没有以提示符开始的行,是解释器输出的信息。需要注意的是示例中的从属提示符用于多行命令的结束,它表示你需要输入一个空行。

本手册中的很多示例都包括注释,甚至有一些在交互提示符中折行。Python中的注释以符号“#”起始,一直到当前行的结尾。注释可能出现在一行的开始,也可能跟在空格或程序代码之后,但不会出现在字符串中,字符串中的#号只代表#号。

示例:


                         

?
3.1
初步认识Python

让我们试验一些简单的Python命令。启动解释器然后等待主提示符“>>>?出现(这用不了太久)。


3.1.1 数值

解释器的行为就像是一个计算器。你可以向它输入一个表达式,它会返回结果。表达式的语法简明易懂:+-*/和大多数语言中的用法一样(比如CPascal),括号用于分组。例如:













c一样,等号(“=”)用于给变量赋值。被分配的值是只读的。



同一个值可以同时赋给几个变量:






Python完全支持浮点数,不同类型的操作数混在一起时,操作符会把整型转化为浮点数。



复数也同样得到了支持,虚部由一个后缀“j”或者“J”来表示。带有非零实部的复数记为“(real+imagj),或者也可以通过“complex(real, imag)函数创建。









复数总是由实部和虚部两部分浮点数来表示。可能从 z.real z.imag 得到复数z的实部和虚部。




用于向浮点数和整型转化的函数(float(), int() long())不能对复数起作用--没有什么方法可以将复数转化为实数。可以使用abs(z)取得它的模,也可以通过z.real得到它的实部。



  







交互模式下,最近一次表达式输出保存在_变量中。这意味着把Python当做桌面计算器使用时,它可以更容易的进行连续计算,例如:








这个变量对于用户来说是只读的。不要试图去给它赋值--由于Python的语法效果,你只会创建一个同名的局部变量覆盖它。


3.1.2 字符串

除了数值,Python还可以通过几种不同的方法操作字符串。字符串用单引号或双引号标识:











字符串可以通过几种方式分行。可以在行加反斜杠做为继续符,这表示下一行是当前行的逻辑沿续。


    
 

注意换行用 /n 来表示;反斜杠后面的新行标识(newline,缩写“n”)会转换为换行符,示例会按如下格式打印:


    

然而,如果我们创建一个“raw”行,/n序列就不会转为换行,示例源码最后的反斜杠和换行符n都会做为字符串中的数据处理。如下所示:



会打印为:


或者,字符串可以用一对三重引号”””或'''来标识。三重引号中的字符串在行尾不需要换行标记,所有的格式都会包括在字符串中。


     
     

produces the following output:

     
     

解释器打印出来的字符串与它们输入的形式完全相同:内部的引号,用反斜杠标识的引号和各种怪字符,都精确的显示出来。如果字符串中包含单引号,不包含双引号,可以用双引号引用它,反之可以用单引号。(后面介绍的print语句,可以可以用来写没有引号和反斜杠的字符串)。

字符串可以用+号联接(或者说粘合),也可以用*号循环。




两个字符串值之间的联接是自动的,上例第一行可以写成“word = 'Help' 'A'这种方式只对字符串值有效,任何字符串表达式都不适用这种方法。






  
    
                            

字符串可以用下标(索引)查询;就像C一样,字符串的第一个字符下标是0。这里没有独立的字符类型,字符仅仅是大小为一的字符串。就像在Icon中那样,字符串的子串可以通过切片标志来表示:两个由冒号隔开的索引。





切片索引可以使用默认值;省略前一个索引表示0,省略后一个索引表示被切片的字符串的长度。



C字符串不同,Python字符串不能改写。按字符串索引赋值会产生错误。


  



  

然而,可以通过简单有效的组合方式生成新的字符串:



切片操作有一个很有用的不变性: s[:i] + s[i:] 等于s



退化的切片索引被处理的很优美:过大的索引代替为字符串大小,下界比上界大的返回空字符串。





索引可以是负数,计数从右边开始,例如:







不过-0还是0,所以它不是从右边计数的!


越界的负切片索引会被截断,不过不要尝试在前元素索引(非切片的)中这样做:




  

理解切片的最好方式是把索引视为两个字符之间的点,第一个字符的左边是0,字符串中第n个字符的右边是索引n,例如:

 
 
 
 

第一行是字符串中给定的05各个索引的位置,第二行是对应的负索引。从ij的切片由这两个标志之间的字符组成。

对于非负索引,切片长度就是两索引的差。例如,word[1:3]的长度是2

内置函数 len() 返回字符串长度:



3.1.3 Unicode 字符串

Python2.0开始,程序员们可以使用一种新的数据类型来存储文本数据:Unicode 对象。它可以用于存储多种Unicode数据(请参阅 http://www.unicode.org/ ),并且,通过必要时的自动转换,它可以与现有的字符串对象良好的结合。

Unicode针对现代和旧式的文本中所有的字符提供了一个序列。以前,字符只能使用256个序号,文本通常通过绑定代码页来与字符映射。这很容易导致混乱,特别是软件的国际化(internationalization--通常写做“i18n--“i”+18 characters +“n”)。Unicode通过为所有字符定义一个统一的代码页解决了这个问题。

Python中定义一个Unicode字符串和定义一个普通字符串一样简单:


引号前小写的“u表示这里创建的是一个Unicode字符串。如果你想加入一个特殊字符,可以使用PythonUnicode-Escape 编码。如下例所示:


被替换的 /u0020 标识表示在给定位置插入编码值为 0x0020 Unicode字符(空格符)。

其它字符也会被直接解释成对应的Unicode码。如果你有一个在西方国家常用的Latin-1编码字符串,你可以发现Unicode字符集的前256个字符与Lation-1的对应字符编码完全相同。

另外,有一种与普通字符串相同的行模式。想要使用PythonRaw-Unicode-Escape 编码,你需要在字符串的引号前加上 ur 前缀。如果在小写“u前可能有不止一个反斜杠,它只会把那些单独的 /uXXXX 转化为Unicode字符。



行模式在你需要输入很多个反斜杠时很有用,可能会用于正规表达式。

作为这些编码标准的一部分,Python提供了一个完备的方法集用于从已知的编码集创建Unicode字符串。

内置函数unicode()?提供了访问(编码和解码)所有已注册的Unicode编码的方法。它能转换众所周知的 Latin-1, ASCII, UTF-8, UTF-16。后面的两个可变长编码字符集用一个或多个byte存储Unicode字符。默认的字符集是 ASCII ,它只处理0127的编码,拒绝其它的字符并返回一个错误。当一个Unicode字符串被打印、写入文件或通过str()转化时,它们被替换为默认的编码。








  

要把一个Unicode字符串用指定的字符集转化成8位字符串,可以使用Unicode对象提供的encode()方法,它有一个参数用以指定编码名称。编码名称小写。


如果你有一个特定编码的字符串,想要把它转为Unicode字符集,,可以使用uncode()函数,它以编码名做为第二个参数。



3.1.4 链表

Python 已经有了几个复合数据类型,用于组织其它的值。最通用的是链表,它写为中括之间用逗号分隔的一列值(子项),链表的子项不一定是同一类型的值。


像字符串一样,链表也以零开始,可以被切片,联接,等等:











与不变的字符串不同,链表可以改变每个独立元素的值:




可以进行切片操作,甚至还可以改变链表的大小:














内置函数len()也同样可以用于链表:


它也可以嵌套链表(在链表中创建其它链表),例如:












注意最后一个例子,p[1]q实际上指向同一个对象!我们在后面会讲到对象语法。

?
3.2
开始编程

当然,我们可以用Python做比22更复杂的事。例如,我们可以用以下的方法输出菲波那契Fibonacci)序列的子序列:












示例中介绍了一些新功能:

  • 第一行包括了复合参数:变量ab同时被赋值为01。最后一行又一次使用了这种技术,证明了在赋值之前表达式右边先进行了运算。右边的表达式从左到右运算。

  • while循环运行在条件为真时执行。在Python中,类似于C任何非零值为真,零为假。 这个条件也可以用于字符串或链表,事实上于对任何序列类型,长度非零时为真,空序列为假。示例所用的是一个简单的比较。标准的比较运算符写法和C相同: < (小于),> (大于),== (等于),<= (小于等于),>=(大于等于)和!= (不等于)

  • 循环体是缩进的:缩进是Python对语句分组的方法。 Python仍没有提供一个智能编辑功能所以你要在每一个缩进行输入一个tab或(一个或多个)空格。 实际上你可能会准备更为复杂的文本编辑器来编写你的Python程序,大多数文本编辑器都提供了自动缩进功能。交互式的输入一个复杂语句时,需要用一个空行表示完成(因为解释器没办法猜出你什么时候输入最后一行)。需要注意的是每一行都要有相同的空字符来标识这是同一个语句块。

  • print语句打印给定表达式的值。它与你仅仅输入你需要的表达式(就像前面的计算器示例)不同,它可以同时输出多个表达式。字符串输出时没有引号,各项之间用一个空格分开,你可以很容易区分它们,如下所示:

    
    

    print语句末尾的逗号避免了输出中的换行:

    
    
    
    
    

    需要注意的是,如果最后一行仍没有写完,解释器会在它打印下一个命令时插入一个新行。


classify.py skimage error: ValueError: can not convert object to float64

在调caffe测试的demo时,然后出现一下报错: Traceback (most recent call last): File "classify.py", line 161, in ...
  • langb2014
  • langb2014
  • 2016年09月03日 09:47
  • 1705

TypeError: Can not convert a float32 into a Tensor or Operation.

错误TypeError: Can not convert a float32 into a Tensor or Operation. # 类型错误:不能将一个浮动32转换为一个张量或操作。TypeEr...
  • FontThrone
  • FontThrone
  • 2017年08月09日 21:03
  • 2292

HTML初步认识

HTML初步认识本篇博客给大家带来html最基础的东西,也就是初步认识html,打算从以下几个方面给大家介绍: 认识什么是纯文本文件txt HTML是负责描述文档语义的语言 HTML骨架和基本语法 可...
  • u010624986
  • u010624986
  • 2016年12月16日 23:46
  • 552

蓝牙的初步认识

一、.Bluetooth是目前使用最广泛的无线通讯协议,主要针对短距离的设备,基本上十米以内,而且是中间无阻碍的才能达到十米,如果中间有阻碍可能不到十米。 二、Bluetooth相关 API   ...
  • fang0521
  • fang0521
  • 2016年09月18日 10:38
  • 110

TypeError: Cannot convert Type TensorType(float32, matrix).....

TypeError: Cannot convert Type TensorType(float32, matrix)…..最下面链接给的错误是cannot conver… 64 to 32,解决方案是...
  • m0_37052320
  • m0_37052320
  • 2017年11月07日 09:04
  • 198

ValueError: could not convert string to float的处理方式

平台:PyCharm 遇到如下问题:     data.append([float(tk) for tk in tokens[:-1]]) ValueError: could not c...
  • u013724573
  • u013724573
  • 2017年05月04日 21:53
  • 8882

对于编码的初步认识

本人对编码的初步认识,经由本人总结如下:
  • kangvcar
  • kangvcar
  • 2016年10月10日 19:18
  • 418

spring-mvc的初步认识

1.整体框架和流程     首先是跟spring-mvc没有直接关系但是是系统整体的流程的说明。     以user管理为例,最外层是UserController结构,这个结构是跟spring-m...
  • my__shy
  • my__shy
  • 2017年01月11日 10:28
  • 178

AsTensorError: ('Cannot convert Tensor("mul:0", shape=(19, 19, 5, 80), dtype=float32) to TensorType'

在做deeplearning.ai 第四课第三周的作业Autonomous driving application - Car detection 时出现的问题,原因是我的后端是theano,需要切换...
  • lh15123as
  • lh15123as
  • 2017年12月20日 16:13
  • 56

builtins.ValueError: could not convert string to float:的问题

builtins.ValueError: could not convert string to float:
  • cxy_hust
  • cxy_hust
  • 2017年11月15日 16:26
  • 651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python指南--初步认识Python
举报原因:
原因补充:

(最多只允许输入30个字)