第1部分
目录
Python语言数据类型、运算符和表达式
Python的数据结构
Python的流程控制
Python函数
Python模块
Python的输入、输出
异常处理
Python语言数据类型、运算符和表达式:
文件类型
Python程序基本概念
Python运算符和表达式
文件类型
源代码、字节代码、优化代码
源代码
Python源代码文件,即py脚本文件,由 python.exe 解释,可在控制台下运行。
pyw脚本文件是图形用户接口(Graphical user interface) 的源文件,专门用来开发图形界面,由 pythonw.exe 解释运行
!python test.py(run test.py)
字节代码
Python源文件经过编译后生成的pyc文件,即字节文件。它与平台无关,所以可以移植到其他系统上。下面这段脚本可以把 example.py 编译为 example.pyc
#compile py to pycimport py_compilepy_compile.compile('example.py')运行此脚本即可得到example.pyc
不能在python的交互界面中运行。只能够在DOS屏幕上运行:python example.pyc 在程序中调用可以用: os.system ("python example.pyc ")
优化代码
经过优化的源文件生成扩展名为pyo的文件,即优化文件。下面步骤可以把 example.py 编译为 example.pyo
启动命令行窗口,进入example.py所在目录:D: cd D:\path\examples
当程序比较大的时候,可以将程序划分成多个模块编写,每个模块用一个文件保存。
模块之间可以通过导入互相调用(import)。
模块也可以导入库中的其他模块。
Python是以模块进行重用的,模块中可以包括类、函数、变量等。
当程序比较大的时候,可以将程序划分成多个模块编写,每个模块用一个文件保存。
模块之间可以通过导入互相调用(import)。 模块也可以导入库中的其他模块。 Python是以模块进行重用的,模块中可以包括类、函数、变量等。
编程风格
以“#”号开头的内容为注释,python解释器会忽略该行内容。
在Python中是以缩进(indent)来区分程序功能块的,缩进的长度不受限制,但就一个功能块来讲,最好保持一致的缩进量。 可以使用空格、Tab键等,但是最好保持一致 如果一行中有多条语句,语句间要以分号(;)分隔。
常量
一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的数,或者如同‘This is a string’、“It‘s a string!”这样的字符串。
它们被称作字面意义上的,因为它们具备字面 的意义——按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。
数
在Python中有4种类型的数——整数、长整数、浮点数和复数。
2是一个整数的例子。 >>> type(1)
长整数不过是大一些的整数。type(1L)
注:基本上int是32位的。long是无限精度的。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子
字符串
字符串是 字符的序列 。 C语言中用字符数组表示,如char str[20] = “hello”.
Python中的字符串可以如下表示:
使用单引号(‘):可以用单引号指示字符串,就如同‘ Hello world ‘这样。所有的空白,即空格和制表符都照原样保留。
使用双引号(“):在双引号中的字符串与单引号中的字符串的使用完全相同,例如”What‘s your name?“。
使用三引号(‘’‘或“”“):利用三引号,可以指示一个多行的字符串,可以在三引号中自由的使用单引号和双引号。
变量
仅仅使用字面意义上的常量很快就会不能满足我们的需求——需要一种既可以储存信息又可以对它们进行操作(改变它的内容)的方法。这是为什么要引入 变量 。
变量的值可以变化,即可以使用变量存储任何东西。变量只是计算机中存储信息的一部分内存。与字面意义上的常量不同,需要一些能够访问这些变量的方法,因此要给变量命名
标识符的命名
变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,要遵循这些规则:
标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。
有效 标识符名称的例子有i、__my_name、name_23和a1b2_c3。
无效 标识符名称的例子有2things、this is spaced out和my-name。
标识符的命名-关键字
and
del
from
not
while
as
elif
global
or
with
assert
else
if
pass
yield
break
except
import
class
exec
in
raise
continue
finally
is
return
def
for
lambda
try
标识符的命名-类保留(下划线的使用)
普通标识符为小写字母表示,类变量使用大写开头的字符串。以下划线开头的标识符是有特殊意义的。
_*:私有类名称,不能用'from module import *'导入
__*__:系统定义的名字, python里特殊方法专用的标识
__*:类的私有变量或方法。
数据类型
每个变量都有自己的类型,可以处理不同类型的值,称为数据类型。
基本的类型是数和字符串,在后面的章节里面还可以研究怎么用类创造自己的类型。
Python中一切都是对象,包括字符串和数。
对象
Python把在程序中用到的任何东西都称为 对象。Python是完全面向对象的语言,任何变量都是对象,甚至包括执行的代码:函数。
Python程序可分解为模块、语句、表达式及对象,程序是由模块构成,模块包含语句,语句包含表达式,表达式建立并处理对象。对象无非是内存中的一部分,包含数值和相关操作的集合。
程序如何工作。首先我们使用赋值运算符(=)把一个字面意义上的常数5赋给变量i。这一行称为一个语句。语句声明需要做某件事情,在这个地方我们把变量名i与值5连接在一起。接下来,我们用print语句打印i的值,就是把变量的值打印在屏幕上。然后我们对i中存储的值加1,再把它存回i。我们打印它时,得到期望的值6。类似地,我们把一个字面意义上的字符串赋给变量s然后打印它。
使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
逻辑行与物理行
物理行是在编写程序时所看见的。逻辑行是Python 看见 的单个语句。Python假定每个 物 理行 对应一个 逻辑行
Python希望每行都只使用一个语句,这样使得代码更加易读。如果想要在一个物理行中使用多于一个逻辑行,那么需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。
强烈建议坚持在每个物理行只写一句逻辑行。
仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。
下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。加\,随后在下一行可以续写
有一种暗示的假设,可以不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。
缩进
空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。错误的缩进会引发错误
不同于C/C++、Java用的是{}
Python程序结构
1. 程序由模块构成 2.模块包含语句
3. 语句包含表达式 4.表达式建立并处理对象
(python中没有类型声明,运行的表达式决定了建立对象的类型,这点有点儿像matlab。)
Python语法实质上是有语句和表达式组成的。表达式处理对象并嵌套在语句中。语句编程实现程序操作中更大的逻辑关系。此外,语句还是对象生成的地方,有些语句会生成新的对象类型(函数、类等)。语句总是存在于模块中,而模块本身则又是由语句来管理的。
Python和其它的编程语言一样可以使用类来开发程序,类的概念简单来说某种类型集合的描述,如“人类”可以被看作一个类,而具体的个人则是由这个类定义的具体对象。python中类的声明使用关键词class,可以提供一个可选的父类或者说基类,如果没有合适的基类,那就用object作为基类。
运算符及其用法
运算符
名称
说明
例子
+
加
两个对象相加
3 + 5得到8。'a' + 'b'得到'ab'。
-
减
得到负数或是一个数减去另一个数
-5.2得到一个负数。50 - 24得到26。
*
乘
两个数相乘或是返回一个被重复若干次的字符串
2 * 3得到6。'la' * 3得到'lalala'。
**
幂
返回x的y次幂
3 ** 4得到81(即3 * 3 * 3 * 3)
/
除
x除以y
4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333
//
取整除
返回商的整数部分
4 // 3.0得到1.0
%
取模
返回除法的余数
8%3得到2。-25.5%2.25得到1.5
<<
左移
把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)
2 << 2得到8。——2按比特表示为10
>>
右移
把一个数的比特向右移一定数目
11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。
&
按位与
数的按位与
5 & 3得到1。
|
按位或
数的按位或
5 | 3得到7。
^
按位异或
数的按位异或
5 ^ 3得到6
~
按位翻转
x的按位翻转是-(x+1)
~5得到6。
<
小于
返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。
5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。
>
大于
返回x是否大于y
5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。type(5)>type(3L)返回False。
<=
小于等于
返回x是否小于等于y
x = 3; y = 6; x <= y返回True。
>=
大于等于
返回x是否大于等于y
x = 4; y = 3; x >= y返回True。
==
等于
比较对象是否相等
x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。
!=
不等于
比较两个对象是否不相等
x = 2; y = 3; x != y返回True。
注:
25.5%2.25得到0.75 -25.5%2.25得到1.5
25.5/2.25=11*2.25+0.75 -25.5/2.25=-11*2.25-0.75=-11*2.25-0.75+(2.25-2.25)=-12*2.25+1.5
not
布尔“非”
如果x为True,返回False。如果x为False,它返回True。
x = True; not x返回False。
and
布尔“与”
如果x为False,x and y返回False,否则它返回y的计算值。
x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象 称为短路计算。
or
布尔“或”
如果x是True,它返回True,否则它返回y的计算值。
x = True; y = False; x or y返回True。
运算符优先级:
运算符
描述
'expr'
字符串转换
{key:expr,...}
字典
[expr1,expr2...]
列表
(expr1,expr2,...)
元组
function(expr,...)
函数调用
x[index:index]
切片
x[index]
下标索引取值
x.attribute
属性引用
~x
按位取反
+x,-x
正,负
x**y
幂
x*y,x/y,x%y
乘,除,取模
x+y,x-y
加,减
x<<y,x>>y
移位
x&y
按位与
x^y
按位异或
x|y
按位或
x<y,x<=y,x==y,x!=y,x>=y,x>y
比较
x is y,x is not y
等同测试
x in y,x not in y
成员判断
not x
逻辑否
x and y
逻辑与
x or y
逻辑或
lambda arg,...:expr
Lambda匿名函数
真值表
对象/常量
值
""
假
"string"
真
0
假
>=1
真
<=-1
真
()空元组
假
[]空列表
假
{}空字典
假
None
假
符合表达式
and or not
变量赋值
单变量赋值 多变量赋值 自变赋值(+=、-=、*=)
变量与基本表达式
变量就是用来记录程序中的信息,它的特点:
变量如对象一样不需要声明。
变量在第一次赋值时创建。
变量在表达式中使用将被替换为他们的值。
变量在表达式中使用以前必须已经赋值。
Last updated
Was this helpful?