为了完成最近的项目,没办法了,Python学起来。我选择的是《Python基础教程》的第2版。我浏览了一下目录,准备只学习第1章、第2章、第3章的部分内容、第4章、第5章的部分内容、第6章、第7章、第9章、第10章的部分内容以及第16章。
这一章的标题叫做“基础知识”,所以内容有些零碎,只记录一下我需要注意的地方吧。
安装环境
Python版本选了3.5.3,下载地址:https://www.python.org/ftp/python/3.5.3/python-3.5.3-amd64.exe
IDE选了PyCharm 2016.2
观点
- 算法不过是程序或者食谱的另外一种说法——详细描述如何做某事。
- 语句和表达式之间的区别:表达式是某事,语句是做某事。语句特性的一般定义是“它们改变了事物”
- 程序员应该确保注释说的都是重要的事情,不要重复代码中显而易见的内容。无用的、多余的注释还不如没有。
要点
实现整除
使用//
来实现整除
输入下面的命令到控制台:
1 // 2
1.0 // 2.0
输出的结果是:
0
0.0
小数的余数
输入下面的命令到控制台:
2.75 % 0.5
输出的结果是:
0.25
这个倒是很神奇
乘方运算
Python中的乘方运算符不是^
(这个是按位异或),而是**
。
输入下面的命令到控制台:
2**3
-3**2
输出的结果是:
8
-9
这是因为幂运算符优先级比取反优先级高的原因。
或者也可以用pow()
函数。
输入:
pow(2,3)
输出:
8
长整数
Python对长整数的支持很好,一般不需要关心是否超出数据的范围问题。
读取用户输入数据
可以使用input函数来读取用户的输入:
代码:
x = input("x: ")
输入:100
查看x的值:
x
输出:
'100'
说明读入了一个字符串。
使用模块中的函数
使用下面的语句来导入一个模块:
import math
然后用下面的语句来使用模块中的函数:
math.floor(32.9)
使用模块中函数的语法是:模块.函数
也可以用下面的语句导入函数,然后就可以不用每次写明模块的名称:
from math import floor
单双引号和转义
Python中,单引号'
和双引号"
是没有区别的,它们可以相互的包含在对方中,说明引号的意思。如:
"Hello 'Tom'"
'Hello "Tom"'
这样编译器就会明白Tom前后有个引号。反之,如果不混合使用就会给编译器造成困扰,如:
'Hello 'Tom''
此时,需要添加\
进行转义。
'Hello \'Tom\''
str和repr的区别
这一部分来自http://blog.youkuaiyun.com/yyt8yyt8/article/details/7030416
内建函数str()和repr() (representation,表达,表示)或反引号操作符可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。
str()函数得到的字符串可读性好(故被print调用),而repr()函数得到的字符串通常可以用来重新获得该对象,通常情况下 obj==eval(repr(obj)) 这个等式是成立的。这两个函数接受一个对象作为其参数,返回适当的字符串。
事实上repr()和“做一样的事情,返回一个对象的“官方”字符串表示。其结果绝大多数情况下(不是所有)可以通过求值运算(内建函数eval())重新得到该对象。
str()则不同,它生成一个对象的可读性好的字符串表示,结果通常无法用eval()求值,但适合print输出。
如下例:
>>> class D(object):
... def __str__(self):
... return "a __str__"
... def __repr__(self):
... return "a __repr__"
...
>>> dr = D()
>>> print dr
a __str__
>>> dr
a __repr__
>>> "%s" % dr
'a __str__'
>>> "%r" % dr
'a __repr__'
为什么有了repr()还需要“?
Python中,有的操作符和函数是做同样的事情,原因是某些场合下函数会比操作符更适合使用,比如函数对象可作为参数传递。双星号(**)乘方运算和pow()内建函数都返回x的y次方.
Python3中已经不用反引号啦
再来看一个例子:
>>> temp = 42
>>> print("The temperature is " + temp)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> print("The temperature is " + repr(temp))
The temperature is 42
长字符串
如果需要写一个非常长的字符串,需要跨越多行,那么可以使用三个引号,如:
'''
This is a long story.
Something happend.
'''
也可以用三个双引号
原始字符串
我们知道,\n
这样的特殊字符会进行转义,变成换行符。
输入:
print('Hello,\nworld!')
输出:
Hello,
world!
有时候我们需要输入这样的路径C:\nowhere
,就会被进行转义。此时可以用\本身对自己进行转义。
输入:
print('C:\\nowhere')
输出:
C:\nowhere
看起来不错,但如果要输入一个很长的路径,比如:C:\VS2015\Common7\Packages\Debugger\X64
就非常麻烦了。
可以用原始字符串来解决这个问题:
输入:
print(r'C:\VS2015\Common7\Packages\Debugger\X64')
输出:
C:\VS2015\Common7\Packages\Debugger\X64
不能在原始字符串的结尾输入\,除非你对\进行转义
Unicode
Python3中所有的字符串都是Unicode编码的。