文章目录
6.1 函数
在实现大型项目时,往往会将需要重复重复使用的代码提取出来,将其定义为函数。从而简化编程工作量,也使程序结构简化
6.1.1 定义函数
-
def 语句用于定义函数
def 函数名(参数表): 函数语句 return 返回值 其中返回值和参数都可省略
6.1.2 调用函数
-
调用函数的基本格式
函数名(参数表)
-
实例
# 定义函数 def add(a, b): return a + b # 调用函数 t = add(10, 20) print(t) # 输出结果为30
6.1.3 函数的参数
函数定义的参数表中的参数称为形式参数,简称形参。调用函数时,参数表中提供的参数称为实际参数,简称实参。实参可以是常量,表达式或变量。实参是常量或表达式时,直接将常量或表达式的计算结果传递给形参。
-
参数的多态性:同一个函数传递的实参类型不同时,可获得的结果不同
# 定义函数 def add(a, b): return a + b add(1,2) # 执行数字加法 add('abc','def') # 执行字符串连接 add((1,2),(3,4)) # 执行元组合并 add([1,2],[3,4]) # 执行列表合并
-
参数赋值传递:Python 允许以形参赋值的方式,将实参传递给指定形参
def add(a, b): return a + b add(a='ab',b='cd') # 通过赋值传递参数 结果为'abcd' add(b='ab',a='cd') # 通过赋值传递参数 结果为'cdab'
-
传递可变对象的引用:当实参引用的是可变对象时,若在函数中修改形参,实参也获得修改后的对象
- 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
def f(a): a[0] = 'abc' x = [1,2] f(x) # 调用函数,传递列表对象的引用 print(x) #输出结果为['abc',2]
-
不定长参数
- 在形参前边加一个
*
,该形参变为不定长元组形参,可以接收所有的位置实参,类型是元组 - 在形参前边加上两个
**
, 该形参变为不定长字典形参,可以接收所有的关键字实图,类型是字典
- 在形参前边加一个
6.1.4 函数嵌套定义
- Python 允许在函数内部定义函数,即内部函数
- 内部函数只能在函数内部使用
6.1.5 lambda 函数
-
lambda 函数也称表达式函数,用于定义匿名函数
-
lambda 只是一个表达式,函数体比 def 简单很多
-
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
-
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
-
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
-
基本格式
lambda 参数表:表达式
-
实例
add = lambda a,b:a+b add(1,2) # 结果为3
6.1.6 递归函数
-
递归函数是指在函数体内调用函数本身
def fac(n): if n==0: #递归调用的终止条件 return 1 else: return n*fac(n-1) # 递归调用函数本身
6.1.7 函数列表
-
因为函数是一种对象,所以可将其作为列表元素使用,然后通过列表索引来调用函数
d = [lambda a,b:a+b,lambda a,b:a*b] d[0](1,3) # 调用第一个函数,结果为4 d[1](1,3) # 调用第二个函数,结果为3
6.2 变量的作用域
变量的作用域是变量的可使用范围,也称变量的命名空间。在第一次给变量赋值时,Python创建变量,创建变量的位置决定了变量的作用域
- 作用域分类
- 本地作用域:没有内部函数时,函数体作为本地作用域。函数内通过赋值创建的变量,函数参数都属于本地作用域
- 函数嵌套作用域:包含内部函数时,函数体为函数嵌套作用域
- 全局作用域
- 文件作用域:程序文件(也称模块文件)的内部为文件作用域
- 内置作用域:Python运行时的环境为内置作用域,它包含了Python的各种预定义变量和函数
6.3 模块
模块是一个包含变量,函数或类的程序文件。模块中也可以包含其他各种Python语句
6.3.1 导入模块
-
import 语句:import语句用于导入整个模块,可以使用as为导入的模块指定一个新名称
#方法一 import 模块名 #使用: 模块名.功能名 import my_ module1 print(my_ module1. num) # 使用my_ module1 中的变量num my_ _module1. func() # 调用my_ module1 中func 函数 dog = my_ _module1.Dog() #调用my_ _module1中的类创建对象 dpg. show_ _info( )
-
from 语句:from语句用于导入模块中的指定对象,导入的对象可以直接使用
#方法二 from 模块名 import 功能名1, 功能名2, #使用: 功能名 #注意点:如果存在同名的万法名,则会被覆盂 ) from my_ _module2 import func, num from my_ _module1 import num func() print( num) #方法三 from 模块名 import * #将模块中所有的功能进行导入 #使用: 功能名 from my_ module2 import * print( num) func( ) dog = Dog() dog. show_ _info() #as 起别名.可以对模块和功能起别名 #注意:如果使用as别名,就不能再使用原来的名字 import my_ module1 as mm1 from my_ module1 import func as m1_ func from my_ _module2 import func as m2_ func mm1. func() m1_ _func() m2_ func()
6.4 包
功能相近或者相似的模块放在一个目录中,并在目录中定义一个 __init__.py
文件,这个目录就是包