无论使用什么语言编程,总要处理数据,处理数据就需要使用变量来保存数据。变量就像一个个小小的容器,用于“盛装”程序中的数据。常量同样也用于“盛装”程序中的数据。
常量和变量的区别:常量一旦保存某个数据后,该数据就不能发生改变;变量保存的数据则可以多次发生改变,只要程序对变量重新赋值即可。
2.1 Python是弱类型语言
Python是弱类型语言,弱类型语言有两个典型特征。
- 变量无须声明即可直接赋值:对一个不存在的变量赋值就相当于定义了一个新的变量。
- 变量的数据类型可以动态改变:同一个变量可以一会儿被赋值为整数型,一会儿被赋值为字符串。
打开Python的交互式解释器,“试验”Python。
上面代码没有生成任何输出,只是向交互式解释器中存入了一个变量a,该变量a的值为5。
如果我们想看到某个变量的值,可以直接在交互式解释器中输入该变量。例如,此处想看到变量a的值,可以直接输入a。
从上面的交互式过程可以看到,交互式解释器输出变量a的值:5。
接下来,改变变量a的值,将新的值赋值给变量a,新赋的值会覆盖原来的值。例如:
此时变量a的值不再是5了,而是字符串"Hello, Python",a的类型变成了字符串。下面再次输入a,让交互式解释器显示a的值。
查看此时a的类型,可以使用Python的内置函数type()。
此时可以看到a的类型是str。
上面的交互过程对应的程序如下。
# 定义一个数值类型变量
a = 5
print(a)
# 重新将字符串赋值给变量a
a = 'Hello, Python'
print(a)
print(type(a))
运行上面的程序,可以看到如下输出结果。
2.2 使用print函数输出变量
前面使用print()函数时,都只输出了一个变量,但实际上print()函数完全可以同时输出多个变量,而且它具有更多丰富的功能。在交互式解释器输入help(print),可以查看到print()函数的详细语法如下:
从上面的语法格式可以看出,value参数可以接受任意多个变量或值,因此print()函数完全可以输出多个值。例如如下代码。
user_name = 'JJ Lin'
user_age = '43'
# 同时输出多个变量和字符串
print("读者名:", user_name, "年龄:", user_age)
运行上面的代码,可以看到如下输出结果。
从输出结果来看,使用print()函数输出多个变量时,print()函数默认以空格隔开多个变量,如果希望改变默认的分隔符,可通过sep参数进行设置。例如输出语句:
# 同时输出多个变量和字符串,指定分隔符
print("读者名:", user_name, "年龄:", user_age, sep='|')
运行上面代码,可以看到如下输出结果。
在默认情况下,print()函数输出后总会换行,这是因为print()函数的end参数的默认值是"\n",这个"\n"就代表了换行。如果希望print()函数输出之后不会换行,则重设end参数即可,例如如下代码。
# 设置end参数,指定输出之后不再换行
print(10, '\t', end="")
print(20, '\t', end="")
print(30, '\t', end="")
上面三条print()语句会执行3次输出,但由于它们都指定了end="",因此每条print()语句的输出都不会换行,依然位于同一行。运行上面代码,可以看到如下输出结果。
file参数指定print()函数的输出目标,默认值为sys.stdout,该默认值代表了系统标准输出,也就是屏幕,因此print()函数默认输出到屏幕。可以通过改变该参数让print()函数输出到特定文件中,例如如下代码。
f = open("poem.txt", "w") # 打开文件以便写入
print('鹅鹅鹅', file=f)
print('曲项向天歌', file=f)
print('白毛浮绿水', file=f)
print('红掌拨清波', file=f)
f.close()
print()函数的flush参数用于控制输出缓存,该参数一般保持为False即可,这样可以获得较好的性能。
2.3 变量的命名规则
Python使用标识符给变量命名,标识符就是给程序中变量、类、方法命名的符号。Python语言的标识符必须以字母、下划线(_)开头,后面可以跟任意数目的字母、数字和下划线(_)。Python语言是区分大小写的,因此abc和Abc是两个不同的标识符。
使用标识符应注意的规则:
- 标识符可以由字母、数字、下划线(_)组成,其中数字不能打头。
- 标识符不能是Python关键字,但可以包含关键字
- 标识符不能包含空格。
2.4 Python的关键字和内置函数
Python还包含一系列关键字和内置函数,一般也不建议使用它们作为变量名。
- 如果使用关键字作为变量名,Python解释器会报错。
- 如果使用内置函数作为变量名,Python解释器虽然不会报错,但是该内置函数就被这个变量覆盖,会导致该内置函数无法使用。
以下是Python3.x版本的关键字表格:
关键字 | 描述 |
False | 布尔值,假 |
None | 空 |
True | 布尔值,真 |
and | 逻辑与操作符 |
as | 别名,用于import语句或with语句中 |
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程序来查看它所包含的关键字。例如如下程序。
# 导入keyword模块
import keyword
# 显示所有关键字
keyword.kwlist
运行上面的程序,可以看到如下输出结果。
上面这些关键字都不能作为变量名。
Python3部分内置函数及描述表格如下。
函数 | 描述 |
abs(x) | 返回数字的绝对值或复数的模 |
all(iterable) | 如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True |
any(iterable) | 如果可迭代对象中有任何元素为真,则返回 True |
ascii(object) | 返回对象的可打印的 ASCII 表示形式,或者如果对象是一个字符串,则返回引用该字符串的字符串 |
bin(x) | 将整数转换为二进制字符串 |
bool([x]) | 返回一个布尔值,True 或 False。x 是可选的参数,如果提供,则根据 x 的值返回 True 或 False |
breakpoint(*args, **kws) | 调用 sys.breakpointhook() |
bytearray([source[, encoding[, errors]]]) | 返回一个新的字节数组对象 |
bytes([source[, encoding[, errors]]]) | 返回一个新的字节对象 |
callable(object) | 如果对象可以被调用(比如函数、方法等),则返回 True |
chr(i) | 返回 Unicode 码位为 i 的字符的字符串表示形式 |
classmethod(function) | 返回一个类方法 |
compile(source, filename, mode[, flags[, dont_inherit]]) | 编译源代码字符串,返回代码对象 |
complex([real[, imag]]) | 返回一个复数,实部和虚部都是浮点数 |
copyright() | 打印 Python 解释器的版权信息 |
credits() | 打印 Python 解释器的贡献者名单 |
delattr(object, name) | 删除对象属性的引用 |
dict([**kwargs]) | 创建一个字典 |
dir([object]) | 返回对象的属性列表,如果不提供对象,则返回当前局部符号表 |
divmod(a, b) | 返回一对数 (a // b, a % b) |
dreload(module) | 重新加载之前已经导入的模块(注意:这不是内置函数,但通常在使用 from importlib import reload 后可用作 reload) |
eval(expression[, globals[, locals]]) | 执行 Python 表达式,并返回表达式的值 |
exec(object[, globals[, locals]]) | 执行存储在对象中的 Python 代码 |
filter(function, iterable) | 过滤可迭代对象的元素,只返回使函数返回值为 True 的元素 |
float([x]) | 将一个数字或字符串转换为浮点数 |
format(value[, format_spec]) | 格式化一个值 |
frozenset([iterable]) | 返回一个不可变的集合对象 |
getattr(object, name[, default]) | 获取对象属性的值 |
globals() | 返回当前全局符号表的字典 |
hasattr(object, name) | 检查对象是否有给定的属性 |
hash(object) | 获取对象的哈希值 |
help([object]) | 启动内置帮助系统,或者打印对象和它的调用签名的帮助信息 |
hex(number) | 将整数转换为小写的十六进制字符串 |
id(object) | 返回对象的唯一标识符,通常是对象在内存中的地址 |
input([prompt]) | 读取用户的输入,并返回字符串 |
int([x[, base]]) | 将一个数字或字符串转换为整数,base 指定了 x 的基数(如果 x 是字符串) |
isinstance(object, classinfo) | 检查对象是否是指定类或其子类的实例 |
issubclass(class, classinfo) | 检查一个类是否是另一个类的子类(直接或间接) |
iter(iterable) | 获取可迭代对象的迭代器 |
len(s) | 返回对象的长度(元素个数) |
list([iterable]) | 创建一个列表 |
locals() | 返回当前局部符号表的字典 |
map(function, iterable, ...) | 将函数应用于可迭代对象的每个元素,并返回结果的迭代器 |
max(iterable[, key[, default]]) | 返回可迭代对象中的最大值 |
min(iterable[, key[, default]]) | 返回可迭代对象中的最小值 |
next(iterator[, default]) | 返回迭代器的下一个项目,如果迭代器耗尽,则返回 default(如果提供) |
object() | 返回一个空的对象 |
oct(number) | 将整数转换为八进制字符串 |
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) | 打开一个文件并返回相应的文件对象 |
ord(c) | 返回 Unicode 字符的 Unicode 码位 |
pow(x, y[, z]) | 返回 x 的 y 次幂,如果 z 给出,返回 x 的 y 次幂对 z 取模的结果 |
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) | 打印输出,默认使用空格分隔,换行结束 |
property(fget=None, fset=None, fdel=None, doc=None) | 返回一个属性值 |
range(start, stop[, step]) | 返回一个范围对象,通常用于 for 循环 |
repr(object) | 返回一个对象的字符串表示形式,通常可以用来重新创建对象 |
reversed(seq) | 返回一个反转的迭代器 |
round(number[, ndigits]) | 四舍五入到给定的小数位数,如果不提供 ndigits,则四舍五入到最接近的整数 |
set([iterable]) | 创建一个集合对象 |
setattr(object, name, value) | 设置对象属性的值 |
slice(start, stop[, step]) | 返回一个表示由 range(start, stop, step) 指定索引集的 slice 对象 |
sorted(iterable[, key][, reverse]) | 返回一个已排序的列表 |
staticmethod(function) | 返回一个静态方法 |
str(object='') | 返回一个对象的字符串表示形式 |
sum(iterable[, start]) | 返回数值可迭代对象的和,可选的 start 参数为求和的初始值 |
super() | 返回父类的一个代理对象,用于调用父类的方法 |
tuple([iterable]) | 创建一个元组 |
type(object) | 返回对象的类型,或者创建一个新的类型 |
vars([object]) | 返回对象的 dict 属性,如果没有提供对象,则返回当前局部符号表 |
zip(*iterables) | 将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同 |
可以在Python交互式解释器中执行dir(__builtin__)获取完整的内置函数列表。
上面这些内置函数的名字也不应该作为标识符,否则Python的内置函数会被覆盖。
作者Info
【微信号】:luckweimin
【微信公众号】:民哥聊编程。欢迎大家关注~
【B站】:民哥聊编程(https://space.bilibili.com/620580007)
【CSDN】:https://blog.csdn.net/u013092707?type=blog