《Python基础教程》--读书笔记 - michael翔的IT私房菜
第一章 快速改造:基础知识
数字和表达式
除法
在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()
函数,可以将给定的数值转换为大于或者等于它的最小整数。
字符串
字符串表示repr
和str
我们在解释器中通过Python打印的字符串还是被引号括起来的。这是因为通过Python打印值得时候会保持该值在Python代码中的状态。
>>>"hello michael"'hello michael'
而通过print
语句时,结果就不一样了。输出结果就是你希望用户所看到的状态。
>>>print "hello michael"hello michael
我们这里讨论的实际是值被转换为字符串的两种机制,可以通过以下两个函数来使用这两种机制:
repr
函数。
它会创建一个字符串,以合法的Python表达式的形式来表示值。
>>>print repr("hello michael")'hello michael'
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
长字符串
如果需要写一个非常非常长的字符串,它需要跨多行,那么三个引号(单引号或者双引号)代替普通引号。
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'
注:当原始字符串的末尾需要输入\
时,那么这个必须要用反斜线转义!
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翔>>>