python笔记-函数2

python笔记-函数2

  1. 形参角度:万能参数*args
1.*args:可以接收所有的位置参数,并将其聚合成一个元组,赋值给args
--------------------example-----------------------
def func(*args):
    print(args)
--------------------result------------------------
func(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
2.*在如上例子中用在函数定义上时,代表聚合传入的参数为一个元组,但在调用的时候使用则为打散,将*后的可迭代对象打散之后传给函数参数,注意*后跟着的应为一个可迭代对象
--------------------example-----------------------
def func(*args):
    print(args)
--------------------result------------------------
func(*'abc', *[1, 2, 3])
('a', 'b', 'c', 1, 2, 3)
  1. 形参角度:万能参数**kwargs
1. **kwargs:可以接收所有的关键字参数,并将其聚合成一个字典,并赋值给kwargs
--------------------example-----------------------
def func(**kwargs):
    print(kwargs)
--------------------result------------------------
func(name='alex', age=18, sex='male')
{'name': 'alex', 'age': 18, 'sex': 'male'}
2. **在函数定义时使用是聚合的作用,在调用时使用代表打散,**仅能用于打散字典。
--------------------example-----------------------
def func(**kwargs):
    print(kwargs)
--------------------result------------------------
func(**{'name':'alex', 'age':18}, **{'sex':'male', 'hobby':'boy'})
func(**[1, 3, 4])
{'name': 'alex', 'age': 18, 'sex': 'male', 'hobby': 'boy'}
TypeError: func() argument after ** must be a mapping, not list
  1. 形参在使用时的顺序
1. 形参在函数定义时的顺序:
位置参数--->*args--->关键字参数--->仅限关键字参数--->**kwargs
--------------------example-----------------------
def func(a,b,*args,name='alex',c,**kwargs):
    print(a,b)
    print(args)
    print(name)
    print(c)
    print(kwargs)
如上定义的函数,a,b为位置参数,*args为万能参数,name为关键字参数,
c,为仅限关键字参数,再为c传参时,应该使用的方式为c=xxx,否则会报错
--------------------result------------------------
func(2,3,4,5,name='taibai',10,age=18)
SyntaxError: positional argument follows keyword argument
func(2,3,4,5,name='taibai',c=10,age=18)
2 3
(4, 5)
taibai
10
{'age': 18}
  1. 名称空间
1. 名称空间:在Python中有三类名称空间,内置名称空间,全局名称空间,局部名称空间
2. 内置名称空间:用于存放Python的内置函数与变量的内存地址(bulitins.py)
3. 全局名称空间:用于存放函数、变量与内存地址之间的对应关系(.py文件)
4. 局部名称空间:只记录函数体里面的变量与数据的对应关系,随着函数的结束而消失,函数被调用时才会产生。
5. 加载顺序:先加载内置名称空间,其次是全局名称空间,最后是局部名称空间(函数执行时才加载局部的)
6.取值顺序:就近原则取值,单向不可逆
先从局部名称空间寻找变量,局部不存在对应变量,再从全局名称空间寻找变量,全局如果还是没有对应变量,就去内置名称空间找变量
  1. 作用域
python中有两大作用域:
1. 全局作用域:包含内置名称空间、全局名称空间
2. 局部作用域:局部名称空间
3. 局部作用域可以引用全局作用域的变量,但不能改变全局作用域的变量值,当Python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作解释器会认为,你再局部已经定义过这个局部变量了。它会从局部作用域寻找这个变量,结果没有定义,报错了。
--------------------example-----------------------
count = 1
def func():
    count += 2
    print(count)
--------------------result------------------------
func()
报错:
local variable 'count' referenced before assignment
  1. 高阶函数(函数的嵌套)
例1:
def func1():
    print('in func1')
    print(3)
    
def func2():
    print('in func2')
    print(4)
func1()
print(1)
func2()
print(2)
结果:in func1 3 1 infunc2 4 2
  1. 内置函数globals(),locals()
1. globals():返回了一个字典,字典的键值对:全局作用域的所有内容
2.locals():返回了一个字典,字典的键值对:返回了当前作用域的所有内容

猜你喜欢

转载自www.cnblogs.com/vvbear/p/12942570.html
今日推荐