初识函数
1.参数
-
函数名加括号是函数的调用,只有print(函数名())才会打印出来函数的返回值.例如:print(func())
-
函数的返回值只有print才能呈现出来,而不是函数的调用
-
动态参数在函数定义阶段是聚合,函数体中是打散
-
动态传参的时候,参数的传递顺序:位置参数,动态位置参数(*args),关键字参数,动态关键字参数(**kwargs)
-
动态位置参数的返回值是元组,动态关键字参数的返回值是字典
def func(a,*args,d='不会',**kwargs): print(a,args,d,kwargs) func('大','作','业',d='一点写不出来','我'='还写吗?','你'='写完讲讲')
dic = {'k1':'v1','k2':'v2'} def func(**kwargs): print(kwargs) # 字典本身 print(*kwargs) # 键 # print(**kwargs) # 报错 : k1是此函数的无效关键字参数 func(**dic) # **dic:把字典打散成一个个的键值对.比如:'k1'='v1','k2'='v2'进行传参
a = 1 def func(): a += 1 # 报错,局部变量不能修改全局变量 print(a) func() # 如果把a+=1删掉,是可以print出来的:找a:局部没有,就会去全局找 # 如果函数是嵌套的,内层没有,去外层找,外层没有就去全局找... # 如果上面这个改成下面这个,就会没问题, # 局部变量不能修改全局变量,但是列表是可变数据类型, # 虽然列表内的元素会改变,但是lst的地址没变 # 上面这个想要运行:a+=1的上面加上:global a lst=[1,23] def wrapper(): lst[0]=2 print(lst) print(globals()) # 全局作用域:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000269941AC320>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/args.py', '__cached__': None, 'lst': [2, 23], 'wrapper': <function wrapper at 0x0000026994281D90>} {} print(locals()) # 局部作用域:{} wrapper()