编程入门02:Python基础语法
by 星辉
Posted on 2018年02月20日周二 at 08:07上午 in 教程
现在让我们从基础概念开始逐步探索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