Python 的函数(三)
1. 变量作用域
程序所有的变量并不是在哪个位置都可以访问的,访问权限在于这个变量在哪里赋值的,变量的作用域决定在哪个部分可访问哪个特定的变量名称;两种最基本的变量作用域是 全局变量和局部变量。
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域;调用函数时,所有在函数内声明的变量名称都将被加入作用域中。
局部变量只能在其被声明的函数内部被访问,不能再函数外被访问。
例子1:
局部变量C是定义在函数 bbc 内部的,不能在函数外被访问;定义在函数外的变量称为 全局变量,在整个程序内都可以访问。
例子2:
变量C在函数 bbc 外声明,但函数 bbc ,仍可以访问变量 C。
例子3:
当 ble 变量即在函数外有声明,又在函数内声明,要区分清楚,尽管变量名一样,但也可当成不同变量来理解。
例子4:
注意: 1. global 将变量定义为全局变量,通过定义为全局变量,可是实现在函数内部改变变量值;
2. 一个 global 语句可同时定义多个变量。
2. 函数的属性
Python 中的函数,命名函数,匿名函数,都是语言和表达式的集合;函数是第一个类对象,意味着函数的用法没有限制,Python 函数的使用方法就像 Python 中其他值一样;Python 函数拥有一些属性,通过使用 Python 内置函数 dir 就能查看这些属性。
例子5:
下面列举了一些函数属性,如下所示:
-
doc 返回指定函数的文档字符串
语法如所示:函数名.__doc__
只能输出一行文档文字,用 三单引号或 三双引号 括文档文字都可以。 -
name 返回函数名字
语法如所示:函数名.__name__
-
module 返回函数定义所在模块的名字
语法如所示:函数名.__module__
-
defaults 返回一个包含默认参数值的元组
语法如所示:函数名.__defaults__
-
globals 返回一个包含函数全局变量的字典引用
语法如所示:函数名.__globals__
3. main 函数
多数语言,main 是程序执行的起点,Python 中也有类似的运行机制,但方式却不同: Python 使用缩进对齐组织代码的执行,所以没有缩进的代码(非函数定和类定义),都会在载入时自动执行,这部分代码可认为是 Python 的 main 函数。
每个模块(文件)都可以任意写一些没有缩进的代码,并在载入时自动执行,为了区分主执行文件还是被调用文件,Python 引入了一个变量 __name__
,他是函数的一个属性,当文件被调用时,__name__
的值为模块名,当文件被执行是,__name__
为 '__main__'
。
这个特性,为测试驱动开发提供了好的支持,可在每个模块中写上测试代码,测试代码仅当模块被 Python 直接执行是才会运行。
例子6:
- Python 代码的执行不依赖于 main 函数;
- Python 代码从没有缩进的代码开始执行。