1. 函数的动态参数
- *args **kwargs
def func(a,b,*args):
print(a,b,args)
func(1,2,3,4,5,6)
结果:
1 2 (3,4,5,6) 可以传递多个参数,以元组形式出现
def func(a,b,*args):
print(a,b,*args) # *args将元组打散
func(1,2,3,4,5,6)
结果:
1 2 3 4 5 6
def num(*args,a=1,b=2):
print(a,b,args)
num(1,2,3,4,5,6)
结果:
1 2 (1,2,3,4,5,6) #打印顺序原因
下边的也可以,不报错,但没有意义
def func(a=1,b=2,*args):
print(a,b,args)
func(10,11,12,13,14,15)
结果:
10 11 (12,13,14,15)
参数排列顺序:优先级
位置参数 > 动态位置参数 > 默认参数 (关键字参数) > 动态关键字参数
def func(a,b,**kwargs):
print(a,b,kwargs) #kwargs 以字典形式输出
func(1,2,c=3,d=4)
结果:
1 2 {"c":3,"d":4}
def func(a,b,**kwargs):
print(a,b,*kwargs) # *kwargs 获得的是字典的键
print(1,2,c=3,d=4)
结果:
1 2 c d
def func(a,b,*args,c=3,d=4,**kwargs):
print(a,b,args,c,d,kwargs)
func(1,2,3,4,c=5,d=6,bj= "首都",alex="IT")
结果:
1 2 (3, 4) 5 6 {'bj': '首都', 'alex': 'IT'}
万能传参
def func(*args,**kwargs):
print(args,kwargs)
func(1,2,3,a=3,b=4,c=5)
结果:
(1, 2, 3) {'a': 3, 'b': 4, 'c': 5}
2. 注释
? 不开头,6个双引号,上三下三
def func(user,password):
"""
密码加密
:param a: 用户名 注释内容
:param b: 密码
:return: 加密的密码
"""
func()
查看注释
print(func.__doc__) _ _
3. 名称空间
- 内置空间:放置内置函数的空间,如print(),inpurt().len()
- 全局空间:当前.py文件组要开辟的空间,放在全局空间
- 局部空间:.py文件中顶头书写,函数中开辟的空间就是局部空间
加载顺序: 内置空间 >全局空间 >局部空间
取值顺序:局部空间 >全局空间>内存空间
作用于:
全局作用域:内置空间+全局空间
局部作用域:局部空间
def func():
print("1")
def f1():
print(2)
return f1()
func()
不管在什么位置,只要是函数名+(),就是在调用此函数,函数调用执行后,函数体中开辟的空间就自动销毁
4. 函数嵌套
def func():
a = 1
def foo():
b = 2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
print(func())
#结果:
2 1 2 None
def a():
a = 1
c()
print(c)
def b():
b = 2
print(b)
def c():
c = 3
print(a) # 而且不能去同级别函数中寻找,只能去上一级或者更上级寻找
def run():
a()
run()
结果:
<function a at 0x000000DF3DBFA950> 变量名不加括号是内存地址
<function c at 0x000000DF3DBFAA60>
5. global + 变量 声明修改全局变量的值
a = 10
def func():
global a #修改全局变量 a
a += 1 #修改全局变量 a=11
print(a) #第二个打印 11
print(a) #第一个打印 10
func()
print(a) #函数结束,但全局变量的a 改变了
结果:
10 11 11
在函数中,局部空间里的变量可以使用全局变量的值,但是不能修改,如果要修改全局变量的值,则需要添加 global + 变量名
6. nonlobal + 变量 不能修改全局变量,只能修改局部变量里的值,逐级修改
-
global : 修改全局空间的变量对应的值 nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,只修改离它最近的一层,最近的一层没有变量继 续向上找,直到找到最外层函数
a = 10
def func():
def a():
a = 20 #下级的修改了,此处不变
def f1():
a = 30 #a 被修改了
def foo():
nonlocal a #要修改局部变量的a的值
a += 1 # 将a 改为 31
print(a) # 31
foo()
print(a) # 31 #a 已经改变了
f1()
print(a)
a()
func()
print(a) #全局空间的a 没有发生任何改变
# 结果: 31 31 20 10
原文地址:https://www.cnblogs.com/lvweihe/p/11275964.html
时间: 2024-11-05 22:39:28