1.打包
* 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量args
def f(*args): print(args) if __name__ == '__main__': f(1,2,33) #运行结果为:(1, 2, 33)
** 的作用:在函数定义中,收集关键字参数传递给一个字典,并将这个字典赋值给变量kwargs
def f(**kwargs): print(kwargs) if __name__ == '__main__': f() #运行结果为:{} if __name__ == '__main__': f(a=1,b=2,c=3) #运行结果为:{'a': 1, 'b': 2, 'c': 3}
2.解包
* 的作用:在函数调用中,* 能够将元组或者列表解包成不同的参数
def func(a, b, c, d): print(a, b, c, d) if __name__ == '__main__': args = (1, 2, 3, 4) func(*args) #运行结果为:1 2 3 4 args = [1, 2, 3, 4] func(*args) #运行结果为:1 2 3 4
** 的作用:在函数调用中,**会以键/值的形式解包一个字典,使其成为独立的关键字参数
def func(a, b, c, d): print(a, b, c, d) if __name__ == '__main__': kwargs = {"a": 1, "b": 2, "c": 3, "d": 4} func(**kwargs) #运行结果为:1 2 3 4
3.return的作用
调用函数之后,要拿到一个返回值,进行后续的一个操作
如果函数没有返回值,默认就是None
当执行函数时,遇到return,会终止函数的调用
#无return的情况:
def fun(): print("执行打印动作") if __name__ == '__main__': res = fun() print(type(res)) print(res==None) #运行的结果为: 执行打印动作 <class 'NoneType'> True
#有return的情况:
def fun(): print("我执行了fun") return 'ok'#执行到该return语句时,函数终止,后边的语句不再执行 print("我执行了fun") if __name__ == '__main__': fun() #函数调用 print(fun()) #输出函数调用 #运行的结果为:我执行了fun #运行的结果为: 我执行了fun ok
4.变量--全局变量&&局部变量
- 全局变量:定义在函数外的变量称之为全局变量,他的作用域范围为全局
- 局部变量:定义在函数内部的变量称为局部变量,他的作用域范围为函数内,也就是出了函数外就无效
a = 6 def fuc(): a = a * 5 print(a) fuc() #执行结果 Traceback (most recent call last): File "F:/workspace/python基础/认识python/lession9.py", line 15, in <module> fuc() File "F:/workspace/python基础/认识python/lession9.py", line 12, in fuc a = a * 5 UnboundLocalError: local variable 'a' referenced before assignment Process finished with exit code 1
在python的函数中等于号左边表示定义了一个局部变量,待赋值,而上面的例子中就相当于你定义了一个局部变量a,但还没赋值就拿来进行运算,自然就会报错。所以,全局变量中在函数中使用的时候也要注意下避免出现这样的情况,你要拿来运算的时候完全可以再定义另外一个变量如b = a*3 这样就没问题了
a = 6 def fuc(): b = a * 5 print(b) fuc() #运行结果为:30 ##############声明一个全局变量################ a = 6 def fuc(): global a a = a * 5 print(a) fuc() #运行结果为:30