《Python从小白到大牛》第4章 Python语法基础

《Python从小白到大牛》已经上市!
《Python从小白到大牛》第4章 Python语法基础

本章主要为大家介绍Python的一些语法,其中包括标识符、关键字、常量、变量、表达式、语句、注释、模块和包等内容。

标识符和关键字

任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Python标识符和关键字。

标识符

标识符就是变量、常量、函数、属性、类、模块和包等由程序员指定的名字。构成标识符的字符均有一定的规范,Python语言中标识符的命名规则如下:

  1. 区分大小写:Myname与myname是两个不同的标识符。

  2. 首字符,可以是下划线(_)或字母,但不能是数字。

  3. 除首字符外其他字符,可以是下划线(_)、字母和数字。

  4. 关键字不能作为标识符。

  5. 不要使用Python内置函数作为自己的标识符。

例如,身高、identifier、userName、User_Name、_sys_val等为合法的标识符,注意中文“身高”命名的变量是合法的;而2mail、room#、\$Name和class为非法的标识符,注意#和\$不能构成标识符。

关键字

关键字是类似于标识符的保留字符序列,由语言本身定义好的,Python语言中有33关键字。只有三个,即False、None和True首字母大写,其他的全部小写。具体内容见表4-1所示。

表 4‑1 Python关键字

Falsedefifraise
Nonedelimportreturn
Trueelifintry
andelseiswhile
asexceptlambdawith
assertfinallynonlocalyield
breakfornot
classfromor
continueglobalpass

变量和常量

上一章中介绍了如何使用编写一个Python小程序,其中就用到了变量。常量和变量是构成表达式的重要组成部分。

变量

在Python中声明变量时不需要指定它的数据类型,只要是给一个标识符赋值就声明了变量,示例代码如下:

# 代码文件:chapter4/src/ch4.2.1.kt

_hello = "HelloWorld" ①
score_for_student = 0.0 ②
y = 20 ③
y = True ④

代码第①行、第②行和第③行分别声明了三个变量,这些变量声明不需要指定数据类型,你赋给它什么数值,它就是该类型变量了。注意代码第④行是给y变量赋布尔值True,虽然y已经保存了整数类型20,但它也可以接收其他类型数据。

提示
Python是动态类型语言^1,它不会检查数据类型,在变量声明时不需要指定数据类型。这一点与Swift和Kotlin语言不同,Swift和Kotlin虽然在声明变量时也可以不指定数据类型,但是他们的编译器会自动推导出该变量的数据类型,一旦该变量确定了数据类型,就不能再接收其他类型数据了,这一点与Python不同。

常量

在很多语言中常量的定义是一旦初始化后就不能再被修改。而Python不能从语法层面上定义常量,Python没有提供一个关键字使得变量不能被修改。所以在Python中只能将变量当成常量使用,只是不要修改它。那么这就带来了一个安全隐患,可能会在无意中被修改,从而引发程序错误。解决此问题要么靠程序员自律和自查;要么通过一些技术手段使变量不能修改。

提示
Python作为解释性动态语言,代码安全很多情况下需要程序员自查的。而Java和C等静态类型语言,这些问题会在编译期检查出来。

注释

Python程序注释使用井号(#),使用时#位于注释行的开头,#后面有一个空格,接着是注释内容。

另外,在第3章还介绍过文档字符串,它也是一种注释,只是用来注释文档的,文档注释将在第5章详细介绍。

使用注释示例代码如下:

# coding=utf-8 ①
# 代码文件:chapter4/4.3/hello.py ②
# _hello = "HelloWorld" ③
# score_for_student = 0.0 ④
 y = 20
 y = "大家好"
 print(y) # 打印y变量 ⑤

代码①和②行#号是进行单号注释,#号也可连续注释多行见代码第③行\~第④行,可以在一条语句的尾端进行注释见代码第⑤行。注意代码①行#
coding=utf-8注释作用很特殊是设置Python代码文件的编码集,该注释语句必须放在文件的第一行或第二行才能有效。它还有替代写法:

#!/usr/bin/python
# -*- coding: utf-8 -*-

其中#!/usr/bin/python注释是在UNIX、Liunx和macOS等平台上安装多个Python版本时,具体指定哪个版本的Python解释器。

提示
在PyCharm工具中对连续多行的注释可以使用快捷键,具体步骤是:选择多行然后按住“Ctrl+斜杠”组合键进行注释。去掉注释也是按住“Ctrl+斜杠”组合键。

注意
在程序代码中,对容易引起误解的代码进行注释是必要的,但应避免对已清晰表达信息的代码进行注释。需要注意的是,频繁的注释有时反映了代码的低质量。当觉得被迫要加注释的时候,不妨考虑一下重写代码使其更清晰。

语句

Python代码是由关键字、标识符、表达式和语句等内容构成,语句是代码的重要组成部分。

语句关注的代码执行过程,如if、for和while等。在Python语言中,一行代码表示一条语句,语句结束可以加分号,也可以省略分号。

示例代码:

# coding=utf-8
# 代码文件:chapter4/4.4/hello.py

_hello = "HelloWorld"
score_for_student = 0.0;  # 没有错误发生
y = 20

name1 = "Tom"; name2 = "Tony" ①

提示
从编程规范的角度讲语句结束不需要加分号,而且每行至多包含一条语句。代码第①行的写法是不规范的,推荐使用:
name1 = "Tom"
name2

Python还支持链式赋值语句,如果需要为多个变量赋相同的数值,可以这样表示:

a = b = c = 10

这条语句是把整数10赋值给a、b、c三个变量。

另外,在if、for和while有代码块的语句中,代码块不是通过大括号来界定的,而是通过缩进,缩进在一个级别的代码是在相同的代码块中。

# coding=utf-8
# 代码文件:chapter4/4.4/hello.py

_hello = "HelloWorld"
score_for_student = 10.0;  # 没有错误发生
y = 20

name1 = "Tom"; name2 = "Tony"

# 链式赋值语句
a = b = c = 10

if y > 10:
    print(y)  ①
    print(score_for_student) ②
else:
    print(y * 10)  ③
print(_hello) ④

代码第①行和第②行是一个同一个缩进级别,他们是在相同的代码块中。而代码第③行和第④行不是在同一个缩进级别中,他们是在不同的代码块中。

提示
一个缩进级别一般是一个制表符(Tab)或4个空格,考虑到不同的编辑器制表符显示的宽度不同,大部分编程语言规范推荐使用4个空格。

模块

Python中一个模块就是一个文件,模块是保存代码的最小单位,模块中可以声明变量、常量、函数、属性和类等Python程序元素。一个模块提供可以访问另外一个模块中的程序元素。

下面通过示例介绍模块的使用,现有两个模块:module1和hello。module1模块代码:

# coding=utf-8
#  代码文件:chapter4/4.5/module1.py

y = True
z = 10.10

print('进入module1模块')

hello模块会访问module1模块的变量,hello模块代码:

# coding=utf-8
# 代码文件:chapter4/4.5/hello.py

import module1  ①
from module1 import z   ②

y = 20

print(y)  # 访问当前模块变量y ③
print(module1.y)  # 访问module1模块变量y  ④
print(z)  # 访问module1模块变量z          ⑤

上述代码hello模块访问module1模块的变量y和z。为了实现这个目的,可以通过两种import语句导入模块module1中的代码元素:

  • import
    \<模块名\>。代码第①行,这种方式会导入模块所有代码元素,访问时需要加“模块名.”,见代码第④行module1.y,module1是模块名,y是模块module1中的变量。

  • from \<模块名\> import
    \<代码元素\>。代码第②行,这种方式会只是导入特定的代码元素,访问时不需要加“模块名.”,见代码第⑤行z变量,但是需要注意如果z变量在当前模块中也有时,z不能导入,即z是当前模块中的变量。

运行hello.py代码输出结果如下:

进入module1模块
20
True
10.1

从运行结果可见import语句会运行导入的模块,注意示例中使用了两次import语句,但只执行一次模块内容。

模块事实上提供一种命名空间(namespace)^2。同一个模块内部不能有相同名字的代码元素,但是不同模块可以,上述示例中的y命名的变量就是在两个模块中都有。

——引自于 维基百科 https://zh.wikipedia.org/wiki/命名空间

如果两个相同名字的模块,任何防止命名冲突呢?那就是使用(package),很多语言都提供了包,例如Java、Kotlin等,他们的作用都是一样的提供一种命名空间。

创建包

重构4.5节示例,现有两个模块hello,他们放在不同的包com.pkg1和com.pkg2中,如图4-1所示,从图中可见包是按照文件夹的层次结构管理的,而且每个包下面会有一个init.py文件,它告诉解释器这个这是一个包,这个文件内容一般情况下是空的,但可以编写代码。

图4-1 包层次

既然包是一个文件夹加上一个空的init.py文件,那么开发人员就可以自己在资源管理器中创建包。笔者推荐使用PyCharm工具中创建,它会创建文件夹的同时还会创建一个空的init.py文件。

具体步骤:使用PyCharm打开创建的项目,右击项目选择New → Python
Package菜单,如图4-2所示,在弹出对话框中输入包名com.pkg,其中com是一个包,pkg是它的下一个层次的包,中间用点(.)符号分隔。

图4-2 PyCharm项目中创建包

包导入

包创建好后,将两个模块hello放到不同的包com.pkg1和com.pkg2中。由于
com.pkg1的hello模块需要访问com.pkg2的hello模块中的元素。那么任何导入呢?事实上还是通过import语句,需要在模块前面加上包名。

重构4.5节示例,com.pkg2的hello模块代码:

# coding=utf-8
# 代码文件:chapter4/4.5/com/pkg2/hello.py

y = True
z = 10.10

print('进入com.pkg2.hello模块')

com.pkg1的hello模块代码:

# coding=utf-8
# 代码文件:chapter4/4.5/com/pkg1/hello.py

import com.pkg2.hello as module1        ①
from com.pkg2.hello import z            ②

y = 20

print(y)  # 访问当前模块变量y
print(module1.y)  # 访问com.pkg2.hello模块变量y   ③
print(z)  # 访问com.pkg2.hello模块变量z

代码第①行是使用import语句com.pkg2.hello模块所有代码元素,由于com.pkg2.hello模块名hello与当前模块名冲突,因此需要as
module1语句为com.pkg2.hello模块提供一个别名module1,访问时需要使用module1.前缀。

代码第②行是导入com.pkg2.hello模块中z变量。from com.pkg2.hello import
z语句可以带有别名,该语句修改为如下代码:

from com.pkg2.hello import z as x
print(x)  # 访问com.pkg2.hello模块变量z

使用别名的目的是防止发生命名冲突,也就是说要导入的z名字的变量在当前模块总已经存在了,所以给z一个别名x。

本章小结

本章主要介绍了Python语言中最基本的语法,首先介绍了标识符和关键字,读者需要掌握标识符构成,了解Python关键字。然后介绍了Python中的变量、常量、注释和语句。最后介绍了模块和包,其中理解模块和包的作用,熟悉模块和包导入方式。

配套视频

http://edu.51cto.com/sd/f907b

配套源代码

http://www.zhijieketang.com/group/8

电子书

https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc

作者微博:@tony_关东升br/>邮箱:eorient@sina.com
智捷课堂微信公共号:zhijieketang
Python读者服务QQ群:628808216

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值