<学习笔记>从零开始自学Python-之-基础语法篇(五)变量

变量是用来储存数据的容器,python是弱类型语言,所以有两个特点:
1变量无须声明即可直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
2变量的数据类型可以动态改变,同一个变量可以一会被赋值为数值,一会又被赋值为字符串。

变量的命名规则

Python 需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)
标识符可以由字母、数字、下画线(_)组成,其中数字不能打头。
标识符不能是 Python 关键字,但可以包含关键字。
标识符不能包含空格。

例如下面变量,有些是合法的,有些是不合法的:
abc_xyz:合法。
HelloWorld:合法。
abc:合法。
xyz#abc:不合法,标识符中不允许出现“#”号。
abc1:合法。
1abc:不合法,标识符不允许数字开头。

Python 的关键字和内置函数

Python 还包含一系列关键字和内置函数,一般也不建议使用它们作为变量名:
如果开发者尝试使用关键字作为变量名,Python 解释器会报错。
如果开发者使用内置函数的名字作为变量名,Python 解释器倒不会报错,只是该内置函数就被这个变量覆盖了,该内置函数就不能使用了。

Python 包含了如表 1 所示的关键字:

表 1 Python 关键字
False None True and as
assert 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 解释器倒不会报错,只 是该内置函数
就被这个变量覆盖了,该内置函数就不能使用了

表 2 Python内置函数
abs() all() any() basestring() bin()
bool() bytearray() callable() chr() classmethod()
cmp() compile() complex() delattr() dict()
dir() divmod() enumerate() eval() execfile()
file() filter() float() format() frozenset()
getattr() globals() hasattr() hash() help()
hex() id() input() int() isinstance()
issubclass() iter() len() list() locals()
long() map() max() memoryview() min()
next() object() oct() open() ord()
pow() print() property() range() raw_input()
reduce() reload() repr() reversed() zip()
round() set() setattr() slice() sorted()
staticmethod() str() sum() super() tuple()
type() unichr() unicode() vars() xrange()
Zip() import() apply() buffer() coerce()
intern
上面这些内置函数的名字也不应该作为标识符,否则 Python 的内置函数会被覆盖。

全局变量和局部变量

所谓作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。

变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。

局部变量只在函数内部起作用,全局变量默认在整个程序起作用。

例:

def test():
    a=5
    print(a)
print(a)
test()

在函数内的print(a)可以打印出结果5,在函数外的语句就会报错,变量“a”未定义

再例

a=5
def test():
    b=8
    print(a)
    print(b)
 test()

因为这时候a是全局函数,所以两个值都可以打印出来。

如果想在函数内定义一个全局函数,用global语句
例:

a=6
def test():
    global a
    a=8
    print(a)

print(a)
test()

这时候打印出来的数字是 6 8
因为print(a)语句执行在先,所以这时候a的值是6
再执行test()这句的时候,a的值已经被重新赋值为8了,所以打印出来的是8.

把上面两个执行语句调一下

a=6
def test():
    global a
    a=8
    print(a)
test()
print(a)

这时候打印出来的两个值都是8,说明函数内部使用了变量a,并对它赋值,而且还把值带出了函数

注:函数的参数也是局部变量