当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

《Python基础教程》--读书笔记 - michael翔的IT私房菜

作者:小梦 来源: 网络 时间: 2024-02-23 阅读:

第一章 快速改造:基础知识

数字和表达式

除法

在python2中,整数数字相除,若结果为小数,仍然会是显示整数,底板除。
例如:1/2,得到的是0.
如果想要编程普通的除法,可以在解释器执行:

from __future__ import division

如果就是想要整除,可以使用双斜线。及时是浮点数相除,仍然会是得到整数。

>>> 1.0//20.0

取余

>>>1%21

幂(乘方)运算符

>>>2**38

内建函数(标准函数)pow()就是有同样的作用。pow其实是power的缩写。
上面等价于:
>>>pow(2,3)

变量

  • x=3这样的语句称为语句,下一行会有新的提示符。

  • x*2这样的语句就是表达式了,下一行会打印结果。

数值3被赋给变量x。或者,变量x绑定到了值(或者对象)3上。

虽然前者跟符合大众说法,通俗易懂,但是,其实从底层原理上,后者更严谨。

函数

  • abs()可以得到数的绝对值。

  • round()四舍五入为最接近的整数。

  • int()可以将浮点数转化为整数

模块

地板除

>>>import math>>> math.floor(32.9)32.0

floor()相对的函数是ceil()函数,可以将给定的数值转换为大于或者等于它的最小整数。

字符串

字符串表示reprstr

我们在解释器中通过Python打印的字符串还是被引号括起来的。这是因为通过Python打印值得时候会保持该值在Python代码中的状态。

>>>"hello michael"'hello michael'

而通过print语句时,结果就不一样了。输出结果就是你希望用户所看到的状态。

>>>print "hello michael"hello michael

我们这里讨论的实际是值被转换为字符串的两种机制,可以通过以下两个函数来使用这两种机制:

  1. repr函数。
    它会创建一个字符串,以合法的Python表达式的形式来表示值。

>>>print repr("hello michael")'hello michael'
  1. str函数
    它会把值转换为合理形式的字符串,以便用户可以理解。

>>>print str("hello michael")hello michael>>> print str(10000L)10000

input和raw_input的比较

例子1:

>>> raw_input_A = raw_input("raw_input: ")raw_input: abc >>> input_A = input("Input: ")Input: abcTraceback (most recent call last):  File "<pyshell#1>", line 1, in <module>    input_A = input("Input: ")  File "<string>", line 1, in <module>NameError: name 'abc' is not defined >>> input_A = input("Input: ")Input: "abc" >>>

例子2:

>>> raw_input_B = raw_input("raw_input: ")raw_input: 123 >>> type(raw_input_B) <type 'str'>>>> input_B = input("input: ")input: 123>>> type(input_B)<type 'int'>>>>

参考:raw_input() 与 input() __ Python
例子 1 可以看到:这两个函数均能接收 字符串 。

  • raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。它会吧所有的输入当做原始数据(raw data),然后将其放入字符串中!所以,如果输入数字时,后面计算,需要转换为数字类型。

  • input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。

说一说合法的Python表达式意味着什么?意味着,你在解释器里>>> 后边直接输入内容后不会报错的语句。上面,例子1你直接输入:abc肯定会出错,因为我们abc没有定义内容呢!所以,此时要输入字符串,我们需要加双引号,这样:"abc"

例子 2 可以看到:raw_input() 将所有输入作为字符串看待,返回字符串类型。而 input() 在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型( int, float );同时在例子 1 知道,input() 可接受合法的 python 表达式,举例:input( 1 + 3 ) 会返回 int 型的 4 。

查看 Built-in-functions ,得知:

input([prompt])

Equivalent to eval(raw_input(prompt)) 

input() 本质上还是使用raw_input()来实现的,只是调用完 raw_input() 之后再调用eval()函数,所以,你甚至可以将表达式作为input()的参数,并且它会计算表达式的值并返回它。

不过在 Built-in Functions 里有一句话是这样写的:Consider using the raw_input() function for general input from users.

除非对 input() 有特别需要,否则一般情况下我们都是推荐使用raw_input()来与用户交互。

长字符串、原始字符串和Unicode

  1. 长字符串
    如果需要写一个非常非常长的字符串,它需要跨多行,那么三个引号(单引号或者双引号)代替普通引号。

print """this is a very long string.hello michaeli am learningpython"""

注:普通字符串也可以跨行,如果一行之中最后一个夫妇是反斜线,那么,换行符本身就“转义”了,也就是被忽略了。

>>>print 'hello \michaelhello michael

2.原始字符串
原始字符串对于反斜线并不特殊对待,在某些情况下,这个特性是很有用的,例如:正则表达式。

换行符\n

>>>print 'hello. \nmichael'hello.michael

但是,下面情况需要注意了:

>>>path = 'C:\nowhere'>>>path'C:\nowhere'

这个看起来貌似是正确的,但是,在打印该字符串的时候就会发现问题了:

>>>print pathC:owhere

现在该怎么解决这个问题呢?除了用\来还可以用原始字符串的方法。因为,当你书写很长的路径表达式时,需要在多个地方添加\来转义是件很麻烦的事情!!!
栗子:

>>> print r'D:\Program Files (x86)\Evernote\Evernote'

注:当原始字符串的末尾需要输入\时,那么这个必须要用反斜线转义!

  1. Unicode字符串
    Python2中的普通字符串在内部是以8位ASCII码形成存储的,而Unicode字符串则以存储16位Unicode字符。这样就能够表示更多的字符集了,包括世界上大多数语言的特殊字符。

注:Python3中所有字符串都是Unicode字符串

本章小结

通过这一章的学习,收获颇丰,虽然很多知识都接触过,但是,看书收获的感觉就是跟加具体和清晰,有章可循。

  • Python Indexpython官方索引,不清楚的函数模块等,都可以在这儿查到

  • 之前对于解释器中>>>u'hello michael翔'之后输出的结果还是u'hello michael翔,因为带有u就感觉别扭,原来不用担心,因为在正式运行完整程序时,它就没了。print语句输出内容才是我们用户最后真正看到的内容!

>>> 'michael翔''michael\xe7\xbf\x94'>>> u'michael翔'u'michael\u7fd4'>>> print 'michael翔'michael缈?>>> print u'michael翔'michael翔>>> 

网友最爱