基础
Python是计算机编程语言,作为语言,必然有自己的语法规则。
Python 语法相对简单,采用缩进
方式。
举个例子:
# 文件名:happy.py
#如果我开心,我就拍拍手
is_happy = True
if is_happy:
print('拍手')
else:
print('{0}滚犊子'.format('你'))
观察上述代码,有如下规则:
- 以
#
开头的语句是注释,注释非常有用,这是你的代码笔记 - 每一行为一个独立的语句,如果一行以冒号
:
结尾,缩进的语句视为代码块
缩进
Python是一门用 空格缩进 来区分代码层次的语言,其实Python并没有强制要求你用Tab缩进或者用空格缩进,甚至空格按几个都没有强制要求。 官方建议是使用4个空格作为缩进:https://www.python.org/dev/peps/pep-0008/ ,言下之意就是官方不提倡使用Tab 缩进。
使用4个空格缩进可以保证代码能在任何平台下任何编辑器保持对齐,但是Tab键就不一定,因为有些编辑器把Tab键按4个字符计算,有些却按8个字符计算,这就是官方建议的原因。
而事实上,笔者习惯了使用Tab进行缩进,笔者常用的2个编辑器 Visual Studio Code 以及 PyCharm ,它们都会自动帮你将Tab键展开为空格。 每个人都有自己的编程习惯,有些程序员就习惯使用空格进行缩进,为此,在美剧《硅谷》第三季中,不同的缩进风格就直接导致理查德与女友分手(Tab键 VS 空格键)。
初识 print() 函数
print() 函数由两部分构成 :
- 指令:print
- 指令的执行对象,在 print 后面的括号里的内容
在使用print函数打印字符串的时候,字符串必须使用英文状态下的 单引号或者双引号 包裹,例如:
#使用单引号或者双引号
print('单引号')
print("双引号")
注意:编程中的标点符号请一律使用英文状态的标点字符,如果使用中文状态下的标点字符会有语法错误 (SyntaxError: invalid syntax)
字面常量
一个字面常量(Literal Constants)的例子是诸如 5
、1.23
这样的数字,或者是如 这是一串文本
或 This is a string
这样的文本。
用这样的称呼是因为它们是 字面上的 ——你用的就是它字面意义上的值或是内容。数字 2
总是表示它本身而非其他含义——它是一个 常量,因为它的值不能被改变。因此,所有的这些都被称作字面常量。
数字
数字主要分为两种类型——整数(Integers)与浮点数(Floats)。
有关整数的例子即 2
,它只是一个整数。
有关浮点数(Floating Point Numbers,在英文中也会简写为 floats )的例子是 3.23
或 52.3E-4
。其中,E
表示 10 的幂。在这里,52.3E-4
表示 52.3 * 10^-4
。
布尔值
一个布尔值只有True
、False
两种值,要么是True
(真),要么是False
(假)。布尔值可以用 and
(与)、or
(或) 和 not
(非) 运算。
and
运算是与运算,只有所有都为 True,and 运算结果才是 True。
or
运算是或运算,只要其中有一个为 True,or 运算结果就是 True。
not
运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。
字符串
一串字符串(String)是 字符(Characters) 的 序列(Sequence)。基本上,字符串就是一串词汇。
你将会在几乎所有你撰写的 Python 程序中使用字符串,所以对下面的部分你要多上点心。
单引号
你可以使用单引号来指定字符串,例如 '将我这样框进来'
或 'Quote me on this'
。
所有引号内的空间,诸如空格与制表符,都将按原样保留。
双引号
被双引号包括的字符串和被单引号括起的字符串其工作机制完全相同。例如 "你的名字是?"
或 "What's your name?"
。
三引号
你可以通过使用三个引号——"""
或 '''
来指定多行字符串。你可以在三引号之间自由地使用单引号与双引号。来看看这个例子:
'''这是一段多行字符串。这是它的第一行。
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''
格式化方法
有时候我们会想要从其他信息中构建字符串。这正是 format()
方法大有用武之地的地方。
将以下内容保存为文件 str_format.py
:
age = 20
name = 'Swaroop'
print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
输出:
$ python str_format.py
Swaroop was 20 years old when he wrote this book
Why is Swaroop playing with that python?
它是如何工作的
一个字符串可以使用某些特定的格式(Specification),随后,format
方法将被调用,使用这一方法中与之相应的参数替换这些格式。
在这里要注意我们第一次应用这一方法的地方,此处 {0}
对应的是变量 name
,它是该格式化方法中的第一个参数。与之类似,第二个格式 {1}
对应的是变量 age
,它是格式化方法中的第二个参数。请注意,Python 从 0 开始计数,这意味着索引中的第一位是 0,第二位是 1,以此类推。
我们可以通过联立字符串来达到相同的效果:
name + 'is' +str(age) + 'years old'
但这样实现是很丑陋的,而且也容易出错。其次,转换至字符串的工作将由 format
方法自动完成,而不是如这般需要明确转换至字符串。再次,当使用 format
方法时,我们可以直接改动文字而不必与变量打交道,反之亦然。
同时还应注意数字只是一个可选选项,所以你同样可以写成:
age = 20
name = 'Swaroop'
print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that python?'.format(name))
这样做同样能得到与前面的程序一样的输出结果。
Python 中 format
方法所做的事情便是将每个参数值替换至格式所在的位置。
变量
如果只使用字面常量很快就会让人感到无聊——我们需要一些能够存储任何信息并且也能操纵它们的方式。这便是 变量(Variables) 登场的时刻。正如其名字所述那般,变量的值是可以变化的,也就是说,你可以用变量来存储任何东西。变量只是你的计算机内存中用以存储信息的一部分。与文字常量不同,你需要通过一些方式来访问这些变量,因此,你需要为它们命名。
标识符命名
变量是标识符的一个例子。标识符(Identifiers) 是为 某些东西 提供的给定名称。在你命名标识符时,你需要遵守以下规则:
- 第一个字符必须是字母表中的字母(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)或下划线(
_
)。 - 标识符的其它部分可以由字符(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)、下划线(
_
)、数字(0~9)组成。 - 标识符名称区分大小写。例如,
myname
和myName
并_不_等同。要注意到前者是小写字母n
而后者是大写字母N
。 - 有效 的标识符名称可以是
i
或name_2_3
,无效 的标识符名称可能是2things
,this is spaced out
,my-name
和>a1b2_c3
。
关键字global
花1分钟简单介绍一个关键字global
,它的作用是标识一个变量为全局变量。
g = 5 # 这是一个全局变量
def hello():
g = 1 # g在这里是局部变量.
print("函数内是局部变量 : ", g)
return g
hello()
print("函数外是全局变量 : ", g)
输出:
函数内是局部变量 : 1
函数外是全局变量 : 5
小结
我们重新阅读开始的那段代码:
# 文件名:happy.py
#如果我开心,我就拍拍手
is_happy = True
if is_happy:
print('拍手')
else:
print('{0}滚犊子'.format('你'))
定义了一个布尔值变量 is_happy
并赋值为True
,
如果变量 is_happy
是真,那么就打印字符串 '拍手'
如果变量 is_happy
是假,那么就打印字符串 '你滚犊子'