编程入门02:Python基础语法

上一篇:编程入门01:Python程序运行

现在让我们从基础概念开始逐步探索Python的语法,编程语言包含多种指令,其中最基本的是“表达式”(Expression),表达式有特定的“值”(Value),例如:1就是一个最简单的表达式,它的值就是1,当你在交互模式下输入1,计算机会返回这个表达式的值1。使用“运算符”(Operator)可以将多个单一表达式组成复合表达式,例如:1+1,Python中的数学运算符除了加减乘除(+-*/)外还有整除(//)取余(%)和乘方(**),运算顺序遵循数学规则,括号可以改变运算顺序,但注意一律使用小括号。通过这样的层层组合,你可以输入任意数学运算式所对应的表达式,计算机总是会自动计算并返回单一的值。

02_expression.png

这个单一的值被称为“物件”或“对象”(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="你好世界!"
>>> type(x)
<class 'str'>

你可以让两个变量指向同一个对象,也可以用del语句删除已有的变量:

>>> y=x  # 两个变量指向了同一个对象
>>> id(x)
2565766974768
>>> id(y)
2565766974768
>>> dir()  # 查看当前名称空间的变量
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x', 'y']
>>> del y  # 删除已有变量
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
>>> 类型=type  # 汉字也可以用做变量名
>>> 类型(x)
<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)等类型,相当于数学中函数的概念。函数名就相当于运算符,参加运算的表达式放在函数名之后的括号里,称为“参数”(Argument),如果有多个参数就用逗号分隔,而运算的结果就是函数的返回值。例如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#54>", line 1, in <module>
    print(x)
TypeError: 'int' object is not callable

——编程原来是这样……

参考视频:Python实例_简单的计算器

编程小提示: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

下一篇:编程入门03:Python模块与库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,685评论 1 10
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,059评论 0 13
  • 一 睡前拿起手机浏览朋友圈,看到姑父发了几张照片,是和一女性的合照,我便点开看,结果是他与姑姑的照片。姑父着一身浅...
    余洂阅读 164评论 0 0