星期三 Python 基础语法
Python注释
Python中的注释有两种方式。一种是单行注释,使用#开头,#号后面的内容都会被解释器忽略;另外一种方式是多行注释,使用三个引号包裹,这里的引号可以是单引号'''也可以是双引号"""。需要注意的是,多行注释虽然常用三个引号,但严格来说这是文档字符串,常用于函数或类的说明,不过在代码中如果没被使用的话,确实能起到注释的效果。
# 这是一个单行注释
print("Hello, World!") # 这里也可以写注释'''
这是一个多行注释
用三引号包裹的内容
可以跨越多行
'''
print("Hello, Python!")
Python变量
想在计算机的内存中保存数据,首先得说一说变量这个概念。在编程语言中,==变量是数据的载体====,简单的说就是一块用来保存数据的内存空间,====变量的值可以被读取和修改==,这是所有运算和控制的基础。计算机能处理的数据有很多种类型,最常见的就是数值,除了数值之外还有文本、图像、音频、视频等各种各样的数据类型。虽然数据在计算机中都是以二进制形态存在的,但是我们可以用不同类型的变量来表示数据类型的差异。
在 Python 语言中,变量不需要显式声明其类型,而是根据赋给变量的值来确定其类型。当然,你也可以在变量名后面加上一个冒号和类型名来显式指定变量的类型,但是这种做法并不是必须的,因为 Python 是一种动态类型语言,变量的类型可以在运行时改变。以下为Python的几种数据类型:
-
int整型,也就是我们常常理解的的整数 -
float浮点型,也就是我们所说的小数 -
str字符型,以引号包裹起来的任意文本,都叫做字符(串)。不同于Java的字符和字符串,这里的引号并不区分单双引号。 -
bool 布尔型,只有True和False两种类型。
# - int 整型,也就是我们常常理解的的整数
var_int:int = 12
print(type(var_int))
#- float 浮点型,也就是我们所说的小数
var_float:float = 12.12
print(type(var_float))
#- str 字符型,以引号包裹起来的任意文本,都叫做字符(串)
var_str:str = "12.12"
print(type(var_str))
#- bool 布尔型,只有True和False两种类型。
var_bool:bool = False
print(type(var_bool))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
type函数是一个Python内置函数,用于返回对象的类型。
变量命名规范
在 Python 中,变量命名需要遵循以下的规则和惯例。
- 规则1:变量名由字母、数字和下划线构成,数字不能开头。
- 规则2:Python 是大小写敏感的编程语言,简单的说就是大写的A和小写的a是两个不同的变量。
- 规则3:变量名不要跟 Python 的关键字重名,尽可能避开 Python 的保留字。这里的关键字是指在 Python 程序中有特殊含义的单词(如:is、if、else、for、while、True、False等),保留字主要指 Python 语言内置函数、内置模块等的名字(如:int、print、input、str、math、os等)。
同时,有一些惯例,可以帮助我们更好地编写和阅读代码。
- 惯例1:变量名通常使用小写英文字母,多个单词用下划线进行连接。
- 惯例2:受保护的变量用单个下划线开头。
- 惯例3:私有的变量用两个下划线开头。
变量的使用
回到最初的案例,var_int:int = 12。在这段代码中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
var_int:int = 12
print(type(type(var_int))) # <class 'type'>
var_int = "12"
print(type(var_int)) # <class 'str'>Python 允许在一行中为多个变量赋值,也允许在一行中为多个变量分配相同的值。
a,b,c = 1,2,3
print(a,b,c) # 1 2 3
d = e = f = 4
print(d,e,f) # 4 4 4可以通过 Python 内置的函数来改变变量的类型,下面是一些常用的和变量类型相关的函数。
-
int():将一个数值或字符串转换成整数,可以指定进制。 -
float():将一个字符串(在可能的情况下)转换成浮点数。 -
str():将指定的对象转换成字符串形式,可以指定编码方式。 -
chr():将整数(字符编码)转换成对应的(一个字符的)字符串。 -
ord():将(一个字符的)字符串转换成对应的整数(字符编码)。
a = 100
b = 123.45
c = '123'
d = '100'
e = '123.45'
f = 'hello, world'
g = True
print(float(a)) # int类型的100转成float,输出100.0
print(int(b)) # float类型的123.45转成int,输出123
print(int(c)) # str类型的'123'转成int,输出123
print(int(c, base=16)) # str类型的'123'按十六进制转成int,输出291
print(int(d, base=2)) # str类型的'100'按二进制转成int,输出4
print(float(e)) # str类型的'123.45'转成float,输出123.45
print(bool(f)) # str类型的'hello, world'转成bool,输出True
print(int(g)) # bool类型的True转成int,输出1
print(chr(a)) # int类型的100转成str,输出'd'
print(ord('d')) # str类型的'd'转成int,输出100Python常量
所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量。但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。
PI = 3.1415926
print(PI)Python关键字
Python 中保留字不能用作常量或变量,或任何其他标识符名称。所有 Python 的关键字只包含小写字母。通过Python的标准模块keyword来查看当前版本的关键字列表。
import keyword
print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
# 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
# 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',
# 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Python 运算符
Python 语言支持很多种运算符,下面的表格按照运算符的优先级从高到低,对 Python 中的运算符进行了罗列:
| 运算符 | 描述 |
|---|---|
** | 幂 |
~、+、- | 按位取反、正号、负号 |
*、/、%、// | 乘、除、模、整除 |
+、- | 加、减 |
>>、<< | 右移、左移 |
& | 按位与 |
^、` | ` |
<=、<、>、>= | 小于等于、小于、大于、大于等于 |
==、!= | 等于、不等于 |
is、is not | 身份运算符 |
in、not in | 成员运算符 |
not、or、and | 逻辑运算符 |
=、+=、-=、*=、/=、%=、//=、**=、&=、` | =、^=、>>=、<<=` |
算术运算符
算术运算需要先乘除后加减,这一点跟数学课本中讲的知识没有区别。如果想改变算术运算的执行顺序,可以使用英文输入法状态下的圆括号(小括号),写在圆括号中的表达式会被优先执行。
print(2 + 3 * 5) # 17
print((2 + 3) * 5) # 25
print((2 + 3) * 5 ** 2) # 125
print(((2 + 3) * 5) ** 2) # 625赋值运算符
赋值运算符的作用是将右边的值赋给左边的变量。赋值运算符还可以跟上面的算术运算符放在一起,组合成复合赋值运算符,例如:a += b相当于a = a + b,a *= a + 2相当于a = a * (a + 2)。下面的例子演示了赋值运算符和复合赋值运算符的使用。
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 195比较运算符
比较运算符也称为关系运算符,包括==、!=、<、>、<=、>=,我相信大家一看就能懂。需要提醒的是比较相等用的是==,请注意这里是两个等号。比较不相等用的是!=,跟数学课本中使用的$\small{\neq}$并不相同,Python 2中曾经使用过<>来表示不等于,在 Python 3中使用<>会引发SyntaxError(语法错误)。比较运算符会产生布尔值,要么是True,要么是False。
print(1 == 1) # True
print("1" != "1") # False逻辑运算符
逻辑运算符有三个,分别是and、or和not 。等价于Java中的&&、||、!。逻辑运算符会连接==两个布尔值或者产生布尔值的表达式==,如果两边的布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。
x = True
y = False
print(x and y) # False
print(x or y) # True
print(not x) # False成员运算符
in 和 not in 用于检查元素是否存在于容器中,支持:
- 列表/元组:顺序检查
- 集合:哈希快速查找
- 字典:默认检查键
- 字符串:子串检查。
以下为简单的案例,其中的列表可以理解为Java中的list,一个可以存放多个变量的数组。字典可以理解为Java中的Map类型,以键值对的方式存储。
# 列表成员判断
colors = ["red", "green", "blue"]
print("red" in colors) # True
print("yellow" not in colors) # True
# 字典成员判断
user = {"name": "Alice", "age": 25}
print("name" in user) # True
print("Alice" in user.values()) # True