一、参数的高级方法:
1.1 参数的定义:
1.1.1 用途:
在不明确接收参数数量时使用*args和**kwargs
1.1.2 特点:
args和 kwargs 是可以更换的,但是程序员(约定俗成)都用它
形参: 位置 > 动态位置 > 默认参数 > 动态默认参数
实参: 位置 > 关键字参数
1.1.3 动态参数:
位置参数 > 动态的位置参数
# 动态参数示例:
# 位置参数 > 动态的位置参数
def func(a,b,c,*args): # 在形参位置*叫做聚合
print(a,b,c)
print(args) # 元组形式
func(1,2,3,4,5,9,6,7,8)
View Code
1.1.4 动态默认参数:
默认参数 > 动态默认参数
# 动态默认参数:
# 默认参数 > 动态默认参数
def func(**kwargs): # 形参的时候**聚合
print(kwargs) # 字典
func(a=1,b=2,c=3) # 关键字的形式传参
View Code
1.1.5 综合示例:
# 综合示例
# 示例1:
# 动态参数与动态默认参数
def func(*args, **kwargs):
print(args, kwargs) # args = () kwargs = {}
func(1, 2, 3, a=4, b=5)
# 示例2:
def func(a, b, c, *args, x=1, y=1, z=1, **kwargs):
print(a, b, c) # 位置参数
print(args, kwargs) # 动态位置参数(元组)和动态默认参数(字典)
print(x, y, z) # 默认参数
# 1 2 3
# (1,2,3,4,5)
# 1 1 1
# {'a': 1, 'b': 1, 'c': 1}
func(1, 2, 3, 4, 5, e=1, f=2, g=3)
View Code
二、聚合与打散:
2.1 聚合的定义:
2.1.1 形参:
在形参处出现*就是在聚合成一个元组
在形参处出现**就是将关键字参数聚合成一个字典
2.1.2 实参:
在实参调用的时候 *将可迭代的对象(字符串,列表,元组,字典,结合)打散
在实参调用的时候 **将可迭代的对象(字典)打散,字典是将键取出 关键字参数(键=值)
2.1.3 聚合与打散的方法:
# 聚合:
li = [1, 2, 3, 5, 4]
def func(*args): # 聚合 (1,2,3,5,4)
print(args)
print(*args) # 打散 1,2,3,5,4
func(*li) # 1,2,3,5,4
# 打散
def func(*args, **kwargs): # * 聚合
print(*args) # *args = 1 2 3 *打散
print(*kwargs) # *kwargs = a b *打散 字典的键
func(1, 2, 3, a=4, b=5)
View Code
2.1.4 综合示例:
# 字典的聚合与打散:
dic = {'a': 1, 'b': 2}
def func(*args, **kwargs): # 聚合 {'a': 1, 'b': 2}
print(args, *kwargs) # print('a','b')
func(**dic) # 字典打散后:a=1,b=2以关键字参数传入
# 列表的聚合与打散:
def func(*args, **kwargs): # 聚合 (1,2,3,5,4)
print(*args, *kwargs) # print(1 2 3 4)
func(*[1, 2, 3, 4])
View Code
三、 函数的注释:
3.1 定义:
""" """ 官方推荐
查看注释: func名.__doc__
查看函数名: func名.__name__
3.2 应用:
对程序注释作用,方便程序的查阅理解
3.3 注释示例:
# 示例
def func(user, pwd):
"""
登录函数
:param user: 用户名
:param pwd: 密码
:return: 校验后的账号和密码
"""
print(666)
print(func.__doc__) # 查看注释
print(func.__name__) # 查看函数名
View Code
四、 名称空间:
4.1 定义:
内置空间中所有代码 -- 内置空间
自己写的py文件 -- 全局空间
函数中的代码 -- 局部空间
4.2 加载顺序:
1.内置空间
2.全局空间
3.局部空间
4.3 取值顺序:
1.局部空间
2.全局空间
3.内置空间
4.找不到就报错
4.4 作用域:
1.全局作用域 内置+全局 = 全局作用域
2.局部作用域 函数内的就是局部作用域
4.5 关键字(global,nonlocal)用法:
4.5.1 定义:
global :
在局部修改全部变量,如果没有就创建一个新的
nonlocal :
在局部空间内,修改离自己最近的变量,如果上一层没有就继续向上找,
直到找到局部变量的顶层,局部空间内没有可以修改的变量,就报错
4.5.2 global关键字的用法:
# 类型示例1
a = 10
def func():
global a # (声明)我要修改a 找到要a
a+=1 # 修改
func()
print(a)
# 类型示例2
def func():
global a #(声明我要修改a,找不到a的时候在全局创建一个 a=0)
a = 1 # a = 1
func()
print(a)
View Code
4.5.3 nonlocal关键字的用法:
# nonlocal关键字的用法:
# 在一个局部空间内,nonlocal会修改离他最近的那个变量,如果上一层
# 没有就继续向上找,直到走到局部空间头部
# 类型示例1
def func1():
def func2():
a = 1
def func3():
nonlocal a
a = 8
print(a)
func3()
print(func2())
func1()
# 打印:8 None
# 类型示例2
def func():
a = 1
def log():
a = 5 # a = 15(修改后的值)
def info():
nonlocal a # 声明修改log函数下边的变量a
a += 10 # a = a + 10 a = 15
print(a) # 15
info()
print(a) # 15
log()
print(a) # 1
func()
# 打印:15 15 1
View Code
五、函数的嵌套:
5.1 定义:
函数嵌套 多个函数嵌套调用
5.2 综合示例:
# 第一种函数嵌套 在函数func内
def func():
print(3)
def f():
print(1)
print(2)
f()
func()
# 3 2 1
# 第二种函数嵌套 多个函数嵌套调用
def func2():
print(1)
log()
def func1():
print(3)
def log():
func1()
print(6)
def fun():
print(7)
fun()
func2()
# 1 3 6 7