编程入门02:Python基础语法
现在让我们从基础概念开始逐步探索Python的语法,编程语言包含多种指令,其中最基本的是“表达式”(Expression),表达式有特定的“值”(Value),例如:1就是一个最简单的表达式,它的值就是1,当你在交互模式下输入1,计算机会返回这个表达式的值1。使用“运算符”(Operator)可以将多个单一表达式组成复合表达式,例如:1+1,Python中的数学运算符除了加减乘除(+-*/
)外还有整除(//
)取余(%
)和乘方(**
),运算顺序遵循数学规则,括号可以改变运算顺序,但注意一律使用小括号。通过这样的层层组合,你可以输入任意数学运算式所对应的表达式,计算机总是会自动计算并返回单一的值。
这个单一的值被称为“物件”或“对象”(Object),对象是一个非常关键的概念,你很快就会发现在Python中“一切皆对象”。每个对象都存在于计算机的内存空间,拥有唯一的编号和确定的类型,你可以用id(对象)来查看它的编号(所在的内存地址),用type(对象)来查看它的类型(所属的“类”名称):
>>> id(1)
1756786144
>>> id(5%2)
1756786144
>>> id(2)
1756786176
>>> type(1)
<class 'int'>
>>> type(2)
<class 'int'>
>>> id(1.0)
2705425373944
>>> type(1.0)
<class 'float'>
你可以看到1是整数类型(int),带有小数点的1.0则是浮点类型(float),浮点类型用于表示实数。其实我们还接触过字符串类型(str),在任意长度的字符序列前后加上引号就定义了一个字符串,字符串支持加法(通过连接生成新字符串)和乘法(通过重复生成新字符串):
>>> "你好"
'你好'
>>> "你好"+"世界!"
'你好世界!'
>>> "你好世界!"*3
'你好世界!你好世界!你好世界!'
>>> type("你好世界!"*3)
<class 'str'>
和数学中一样,你可以用“变量”(Variable)来代表某个数值,这称为变量“赋值”(Assign),变量名可以使用字母(区分大小写)、数字(但不能以数字开头)和下划线,也可以使用任何全角字符包括所有汉字(但建议不要用全角字符)。变量不能和Python语言的关键词重名,否则执行时会报语法错误,你可以输入help("keywords")查看关键词列表。变量赋值语句的基本写法是:变量名=表达式,注意“=”应该读作“赋值”(Python中的等于号是==),一个变量也就是一个单一表达式:
>>> x=1
>>> x+2
3
>>> x,y=1,100 # 同时给多个变量赋值
>>> x
1
>>> y
100
>>> x=x+1 # x原值加1再赋值给x
>>> x
2
>>> x+=1 # x原值加1再赋值给x的简洁写法
>>> x
3
>>> x,y=y,x # 对调两个变量所指的对象,其他编程语言基本都需要三条指令才能实现这个操作……
>>> x
100
>>> y
3
>>> type(x)
<class 'int'>
>>> x="你好世界!"
>>> x*2
'你好世界!你好世界!'
>>> y=x # 两个变量指向了同一个对象
>>> id(x)
2565766974768
>>> id(y)
2565766974768
>>> 类型=type
>>> 类型(y)
<class 'str'>
>>> 类型(id)
<class 'builtin_function_or_method'>
>>> 类型(类型)
<class 'type'>
现在你可能会猜到了,这些id(1)、type(1),还有我们已经接触过的print("Hello World!")也属于复合表达式,id、type、print也是指向某个对象的变量,这种对象是可以做“调用”(Call)运算的,在Python中分为“函数”(function)、“方法”(method)和“类型”(type)等类型,相当于数学中函数的概念。函数名就相当于运算符,参加运算的表达式放在函数名之后的括号里,称为“参数”(Parameter),如果有多个参数就用逗号分隔,而运算的结果就是函数的返回值。例如max函数可以从多个数中找出最大值:
>>> max
<built-in function max>
>>> max(1,3,9,2)
9
>>> type(max)
<class 'builtin_function_or_method'>
>>> type(max(1,3,9,2))
<class 'int'>
函数能完成各种复杂的功能。例如之前看到的input函数,可以接受一个字符串参数,执行时会显示此字符串作为提示,然后将用户在按回车键之前输入的全部内容作为字符串返回,也可以写成不带参数的input(),执行时就不显示任何提示。print函数同样可以不带参数,这将输出一个空行;也可以带任意多个参数,这将输出以空格分隔的多个值。注意:print函数输出的内容并不是它的返回值,print函数无返回值——或者可以说print函数返回值为“空”,Python专门定义了一个关键词None来代表空值(类型为NoneType),当返回值为空时不显示任何东西,如果你想强制输出空值,可以print(None):
>>> None
>>> print(None)
None
>>> print(1,2,3)
1 2 3
>>> print(print(1,2,3)) # 内层print输出三个参数的值,外层print输出内层print返回的空值
1 2 3
None
总而言之,Python语言中的变量就是贴在对象上的标签,所以它还有一个更笼统的叫法——标识符(Identifier)。变量没有确定的类型,它所指向的对象有确定的类型。在Python关键词以外的任何名称例如print也就是一个指向具体对象的变量而已,你完全可以把它指向别的对象(当然不建议这样做):
>>> p=print # p和print都指向同一个函数对象
>>> p(x)
你好世界!
>>> print=10 # print指向一个整数对象了
>>> print(x) # 如果尝试调用运算,会提示类型错误“int对象是不能调用的”
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
print(x)
TypeError: 'int' object is not callable
——编程原来是这样……
编程小提示:Python解释器的源码
官方Python解释器是用C语言编写的,称为CPython,你可以在这里查看CPython的源代码 https://github.com/python/cpython
如果你想知道所有内建函数是怎样实现的,可以打开这个C文件,例如其中的builtin_print函数就对应Python中的print函数 https://github.com/python/cpython/blob/master/Python/bltinmodule.c